【问题标题】:SQL does not take in positive stringsSQL 不接受正字符串
【发布时间】:2021-06-26 15:41:54
【问题描述】:

我正在使用 SQL Server 2012。我有一个陷阱,我得到减号并将其放在一组字符串中我的值的前面,但是也有没有减号的值,它们出现了在我的专栏中作为空值。 我需要一种不接受这些正值的方法,因为这是一个标准过程,我只需要查询中的负值。

我的代码是

CASE 
   WHEN CHARINDEX('-', SUBSTRING([Txt], 147, 10)) > 0   
      THEN '-' + REPLACE(LTRIM(RTRIM(SUBSTRING([TXT], 147, 9))), ',','') 
END AS [Open_Amount] 

在我的查询中,正值作为我不想要的“空值”出现,如果open_amount 是正值,我希望忽略整行。我可以在我的案例中添加一个具体的 else 声明还是有其他方法?如果它有助于使用视图/交叉应用,那么不幸的是这个数据结构不是一个选项

【问题讨论】:

  • 请提供样本数据和期望的结果。您的代码和您的描述似乎没有什么共同之处。
  • 嗨,戈登,想要的结果是未结金额列只显示负值,因此我的案例陈述,但是该子字符串中有正值,我需要从我的查询中“删除”,我不能让它们作为空值出现,因为我需要删除整行(具有正值)

标签: sql sql-server-2012 substr charindex


【解决方案1】:

这是你想要的吗?

(case when Substring([Txt], 147, 10) like '%-%' 
      then '-' + Replace(LTrim(RTRIM(Substring([TXT], 147, 9))), ',', '') 
      else Replace(LTrim(RTRIM(Substring([TXT], 147, 9)))
 end) as [Open_Amount]
from db.txt

如果您只想保留负数行,请使用:

where substring([Txt], 147, 10) like '%-%' 

【讨论】:

  • 嗨,戈登,感谢您的回复,很遗憾没有。使用该代码只会拉入正值,我希望它们被忽略。所以基本上我希望它像你一样在 147-157 中寻找减号并将其放在前面,但如果没有减号,我需要它不带入值,因此该行将被跳过
  • @Git_Hub-96 。 . .如果你想跳过一行,你需要使用where 子句,而不是case 表达式。
  • 我该怎么做?这样做的方法是:在我的情况下,否则将其设置为将所有正值作为'test'然后在我的 where go "LTrim(RTRIM(Substring(txt, 147, 9))) '%test %'" 我不确定这会起作用吗?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
相关资源
最近更新 更多