如何在SQL Server中检查数据字符串之间的分隔符(数据分隔符)
我需要编写一个SQL脚本来检查SQL列中数据字符串之间的分隔符。此列以以下格式存储数据字符串:如何在SQL Server中检查数据字符串之间的分隔符(数据分隔符),sql,sql-server,Sql,Sql Server,我需要编写一个SQL脚本来检查SQL列中数据字符串之间的分隔符。此列以以下格式存储数据字符串: ODC-2016-111-824035,ODC-2003-283-125666 通常它应该是逗号,我想检查是否有任何其他不合适的分隔符,例如冒号:,分号;,破折号-,\,/,空格等 仍在尝试,但找不到任何有用的东西 一列中有多个数据字符串,它们之间只能用逗号分隔,如下所示: ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC
ODC-2016-111-824035,ODC-2003-283-125666
通常它应该是逗号,我想检查是否有任何其他不合适的分隔符,例如冒号:,分号;,破折号-,\,/,空格等
仍在尝试,但找不到任何有用的东西
一列中有多个数据字符串,它们之间只能用逗号分隔,如下所示:
ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666
但有时也有一些不合适的分隔符,如冒号:,分号;,破折号-、\、/、空格等-如下所示:
ODC-2016-737-733488-ODC-2011-918-286353;ODC-2016-111-824035:ODC-2003-283-125666
实现这一点的学术和简洁的方法是使用基于正则表达式的查询,其语法因数据库而异。
如果您愿意,一个更简单的解决方案是利用CHARINDEX或具有嵌套CASE语句的等效函数。
对于SQL Server,基于正则表达式的解决方案可以如下所示
with a as (
select 'ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666' phrase
)
select case count(*) when 0 then 'OK' else 'Special / Undesired character(s) present' end
from a where phrase like '%[,-;]%' -- add all special / undersired characters between []
SELECT
CASE CHARINDEX(',', 'ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666')
WHEN 0 THEN CASE CHARINDEX('-', 'ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666')
WHEN 0 THEN 'OK' -- you can nest case to capture other characters if you wish
ELSE 'TEXT HAS -'
END
ELSE 'TEXT HAS ,'
END
基于CHARINDEX的解决方案如下所示
with a as (
select 'ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666' phrase
)
select case count(*) when 0 then 'OK' else 'Special / Undesired character(s) present' end
from a where phrase like '%[,-;]%' -- add all special / undersired characters between []
SELECT
CASE CHARINDEX(',', 'ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666')
WHEN 0 THEN CASE CHARINDEX('-', 'ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666')
WHEN 0 THEN 'OK' -- you can nest case to capture other characters if you wish
ELSE 'TEXT HAS -'
END
ELSE 'TEXT HAS ,'
END
看看正则表达式是如何工作的:非常感谢您的帮助。我仍处于学习SQL的早期阶段,如果您能帮助我将其添加到select语句中,我将不胜感激。此列中有数千行数据,因此我不太清楚如何将其应用于此列。格式应为:ODC-XXXX-XXX-XXXXXX非常感谢您的帮助您没有显示select语句,从您的描述中,问题一点也不清楚。您能否描述一下这个表,提供一些示例数据,并描述查询应该返回什么?