Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中检查数据字符串之间的分隔符(数据分隔符)_Sql_Sql Server - Fatal编程技术网

如何在SQL Server中检查数据字符串之间的分隔符(数据分隔符)

如何在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

我需要编写一个SQL脚本来检查SQL列中数据字符串之间的分隔符。此列以以下格式存储数据字符串:

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语句,从您的描述中,问题一点也不清楚。您能否描述一下这个表,提供一些示例数据,并描述查询应该返回什么?