【问题标题】:In the SQL Server, how can i check if the column value contains only zero [duplicate]在 SQL Server 中,我如何检查列值是否仅包含零 [重复]
【发布时间】:2021-11-01 18:14:05
【问题描述】:

假设:将 Sample 视为 db,将 Column_Name 视为 table。

示例输入:

Column_Name
12345
000
00
00000

输出:

Column_Name
000
00
00000

Select * from Sample.Column_Name where  Column_Name like '[0]+'

上面的代码可以正常工作 什么是正确的方法?

【问题讨论】:

  • 列数据类型?
  • Varchar 是数据类型
  • 真的还在使用 SQL Server 2008 吗?它已经完全不受支持超过 2 年了;很久以前就完成了任何升级路径。
  • v18是SSMS的版本,找SQL SERVER的版本做select @@version
  • 版本为 2017

标签: sql sql-server sql-server-2008 sql-server-2012


【解决方案1】:
select * from Sample.Column_Name where isnumeric(Column_Name) = 1 and cast(Column_Name as int) == 0

【讨论】:

  • Tq ,但是如果有一个值说 1000 这也将在输出中,我只希望在操作中出现零的值。
  • 去掉第一个 % 符号
  • 但是'01' 仍然匹配,@theunknownSAI。以上将匹配任何字符串,包含字符'0',而不是仅由字符'0'组成的字符串。
  • 更新了答案
【解决方案2】:

您可以将not like 与这样的通配符一起使用:

where column_name not like '%[^0]%'

为了确保有一个零:

where column_name not like '%[^0]%' and column_name like '%0%'

你也可以使用replace():

where replace(column_name, '0', '') = ''

甚至try_convert():

where try_convert(int, column_name) = 0

不过,这也将接受 -0+0 和空格。

【讨论】:

  • 替换版本也将返回一个空字符串(如果在列中找到。)
  • try_convert 也将接受 '+0', ' 0 '
  • @jarlh 。 . .真的。不过,我想我已经在第一个示例中介绍了这一点。
【解决方案3】:

确切的解决方案应该是:

SELECT * 
FROM   Sample.Column_Name 
WHERE  Column_Name = REPLICATE('0', LEN(Column_Name ));

假设 Column_Name 是一个 VARCHAR 数据类型列

【讨论】:

  • 也接受尾随空格。 REPLICATE('0', LEN(Column_Name + 'a') - 1)
  • 我认为数据库数据质量是完美的……当然,这是我通常为所有数据库所做的。如果不是这种情况,一个简单的 TRIM 将完成删除训练和前导空格的工作......
猜你喜欢
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 2020-07-21
  • 2016-03-05
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多