首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于将数据分成两个字段的SQL查询

问用于将数据分成两个字段的SQL查询
EN

Stack Overflow用户
提问于 2009-07-02 14:21:40
回答 4查看 3K关注 0票数 0

我有一列中的数据,我想将其分成两列。如果数据存在,则用逗号分隔。此字段可以没有数据,可以只有一组数据,也可以有两组由逗号表示的数据。目前,我提取数据并保存为逗号分隔的文件,然后使用FoxPro将数据加载到表中,然后根据需要处理数据,然后将数据重新插入到另一个供我使用的SQL表中。我想删除FoxPro部分,让SQL查询为我提取数据。下面是数据外观的示例。

代码语言:javascript
复制
Store   Amount  Discount
1       5.95    
1       5.95    PO^-479^2
1       5.95    PO^-479^2
2       5.95    
2       5.95    PO^-479^2
2       5.95    +CA8A09^-240^4,CORDRC^-239^7
3       5.95    
3       5.95    +CA8A09^-240^4,CORDRC^-239^7
3       5.95    +CA8A09^-240^4,CORDRC^-239^7

在上面的数据中,我想将amount字段中的数据相加,得到一个总金额。然后提取位于克拉字符之间的特定折扣金额,并将其相加,以获得总折扣金额。然后将两者相加,得到总净值。我想要编写的查询将根据需要分隔折扣字段,请参阅store 2第3行以了解正在应用的两个折扣,然后提取克拉字符之间的值。

EN

回答 4

Stack Overflow用户

发布于 2009-07-02 14:32:39

对于SQL Server:您可以在sql语句中使用ChardIndex(',',fieldname)来查找逗号的位置,然后使用子字符串来解析出第一个和第二个字段。

票数 0
EN

Stack Overflow用户

发布于 2009-07-02 14:33:43

对于Oracle,您可以在select子句中使用类似下面这样的case语句。使用两个折扣中的每一个:

代码语言:javascript
复制
CASE WHEN LENGTH(foo.discount) > 0 AND INSTR(foo.discount,',') > 0 THEN
SUBSTR(foo.discount,1,INSTR(foo.discount,',',1,1)) ELSE foo.discount END AS discount_column_1
票数 0
EN

Stack Overflow用户

发布于 2009-07-02 15:09:02

我最终弄清楚了如何在我需要的时候分隔字段。下面是将折扣字段一分为二的代码。现在,我可以根据需要分隔字段,并将分隔的数据插入到临时表中,然后使用一组类似的代码提取由克拉字符包围的确切数量。感谢你在上面两个答案中的帮助。我使用了两者的组合来得到我需要的东西。

代码语言:javascript
复制
CASE LEN(X.DISCOUNT)-LEN(REPLACE(X.DISCOUNT,',',''))
    WHEN 1 THEN SUBSTRING(X.DISCOUNT,1,CHARINDEX(',',X.DISCOUNT)-1)
    ELSE X.DISCOUNT     
END 'FIRST_DISCOUNT',
CASE LEN(X.DISCOUNT)-LEN(REPLACE(X.DISCOUNT,',',''))
    WHEN 1 THEN SUBSTRING(X.DISCOUNT,CHARINDEX(',',X.DISCOUNT)+1,LEN(X.DISCOUNT)-CHARINDEX(',',X.DISCOUNT)+1)
    ELSE ''
END 'SECOND_DISCOUNT'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1074677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档