Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 从数据映射中可能的varchar中分离唯一标识符值_Sql_Sql Server - Fatal编程技术网

Sql 从数据映射中可能的varchar中分离唯一标识符值

Sql 从数据映射中可能的varchar中分离唯一标识符值,sql,sql-server,Sql,Sql Server,我很难区分数据映射脚本中的“UNIQUEIDENTIFIER”和“varchar”。这是数据不匹配 到目前为止,我试过: --my_field is a UNIQUEIDENTFIER SELECT distinct my_field, len(my_field), count(my_field) FROM my_table_ WHERE len(my_field) < 36 OR len(my_field) > 36 group by my_

我很难区分数据映射脚本中的“UNIQUEIDENTIFIER”和“varchar”。这是数据不匹配

到目前为止,我试过:

--my_field is a UNIQUEIDENTFIER

    SELECT distinct my_field, len(my_field), count(my_field) 
    FROM my_table_ 
    WHERE len(my_field) < 36 OR len(my_field) > 36 
    group by my_field

    SELECT my_field, len(my_field) 
    FROM my_table_ 
    WHERE my_field LIKE '%[!#%&+,./:;<=>@`{|}~"()*\\\_\^\?\[\]\'']%' {ESCAPE '\'}

非常感谢您的帮助。

假设您的SQL Server版本是2012或更高版本,如果不是,您真的应该升级,因为2012是Microsoft仍然支持的最早版本-您可以使用try\u cast-如果cast失败,它将返回null:

样本数据:

DECLARE @T AS TABLE
(
    my_field varchar(100)
)

INSERT INTO @T (my_field) VALUES
('608DC3C3-1B2E-47AA-9362-33CD76DA3F6A'), ('A3871EA9-172D-49DD-8874-A850857F01FB'),
('A3871EA9-THIS-IS-WRONG-A850857F01FB'), ('And so is this')
查询:

SELECT my_field
FROM @T
WHERE TRY_CAST(my_Field AS UNIQUEIDENTIFIER) IS NULL
结果:

my_field
A3871EA9-THIS-IS-WRONG-A850857F01FB
And so is this

uniqueidentifier不是varchar,而是guid。我真的不明白你想在这里做什么。请提供更多关于这个问题的背景资料?所需结果唯一标识符是128位二进制数据类型。不要将数据类型的文本表示与它的实际内容混淆。当然,您几乎总能看到文本表示,因为这是我们通常显示数据供人类使用的方式。uniqueidentifier的长度永远不会超过128位,也不会包含任何字符。@ZoharPeled-表中有数百万行和几个varchar值,或者至少它们不是GUID,现在不应该在表中。我很难分辨那些坏苹果。他们是如何在那里结束的这是一个不同的讨论。谢谢所以my_字段作为varchar36列,该列应包含uniqueidentifier的字符串表示形式,但在某些行中,它包含无法转换为uniqueidentifier的值,您想查找这些行吗?问题只是一个转义序列,替换为“已修复”。FML!