sql-如何检查字符串是否为uniqueidentifier?
是否有与IsDate或IsNumeric等效的uniqueidentifier(SQL Server)?还是有等同于(C#)TryParse的东西?
否则,我将不得不编写自己的函数,但是我想确保自己没有重新发明轮子。
我要介绍的场景如下:
SELECT something FROM table where isUniqueidentifier(column) = 1
Benoittr asked 2020-01-23T02:27:19Z
12个解决方案
63 votes
SQL Server 2012通过WHERE使这一切变得更加容易
SELECT something
FROM your_table
WHERE TRY_CONVERT(UNIQUEIDENTIFIER, your_column) IS NOT NULL;
对于早期版本的SQL Server,现有答案缺少几点,这意味着它们可能与SQL Server实际上会毫无疑问地转换为WHERE的字符串不匹配,或者可能最终导致无效的转换错误。
SQL Server接受包含在WHERE中或不包含在其中的GUID。
此外,它会忽略字符串末尾的多余字符。 例如,WHERE和À都成功。
在大多数默认归类下,WHERE将最终匹配字符,例如À或Ë
最后,如果将结果中的行强制转换为uniqueidentifier,将强制转换尝试放在case表达式中非常重要,因为强制转换可能发生在WHERE行过滤之前。
因此(借用@ r0d30b0y的想法)可能会更健壮一些
;WITH T(C)
AS (SELECT ‘5D944516-98E6-44C5-849F-9C277833C01B’
UNION ALL
SELECT ‘{5D944516-98E6-44C5-849F-9C277833C01B}’
UNION ALL
SELECT ‘5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’
UNION ALL
SELECT ‘{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss’
UNION ALL
SELECT ‘ÀD944516-98E6-44C5-849F-9C277833C01B’
UNION ALL
SELECT ‘fish’)
SELECT CASE
WHEN C LIKE expression + ‘%’
OR C LIKE ‘{‘ + expression + ‘}%’ THEN CAST(C AS UNIQUEIDENTIFIER)
END
FROM T
CROSS APPLY (SELECT REPLACE(‘00000000-0000-0000-0000-000000000000’, ‘0’, ‘[0-9a-fA-F]’) COLLATE Latin1_General_BIN) C2(expression)
WHERE C LIKE expression + ‘%’
OR C LIKE ‘{‘ + expression + ‘}%’
Martin Smith answered 2020-01-23T02:27:57Z
58 votes
不是我的,在网上找到了这个……我想分享。
SELECT 1 WHERE @StringToCompare LIKE
REPLACE(‘00000000-0000-0000-0000-000000000000’, ‘0’, ‘[0-9a-fA-F]’);
r0d30b0y answered 2020-01-23T02:28:17Z
24 votes
SELECT something
FROM table1
WHERE column1 LIKE ‘[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]’;
更新:
…但是我更喜欢@ r0d30b0y的答案中的方法:
SELECT something
FROM table1
WHERE column1 LIKE REPLACE(‘00000000-0000-0000-0000-000000000000’, ‘0’, ‘[0-9a-fA-F]’);
onedaywhen answered 2020-01-23T02:28:41Z
4 votes
我不知道您可以“开箱即用”使用任何东西-恐怕您必须自己编写。
如果可以:尝试将其编写在C#库中并将其作为SQL-CLR程序集部署到SQL Server中-那么您可以使用像Guid.TryParse()这样的东西,它肯定比T-SQL中的任何东西都容易使用。
marc_s answered 2020-01-23T02:29:06Z
2 votes
r0d30b0y答案的一种变体是使用patindex在字符串中查找…
PATINDEX(‘%’+REPLACE(‘00000000-0000-0000-0000-000000000000’, ‘0’, ‘[0-9a-fA-F]’)+’%’,@StringToCompare) > 0
曾用于在URL字符串中查找Guid。
高温超导
戴夫
Dave answered 2020-01-23T02:29:39Z
2 votes
喜欢保持简单。 一个GUID包含四个-即使只是一个字符串也包含在内
WHERE栏,例如’%-%-%-%-%’
Mike answered 2020-01-23T02:30:03Z
1 votes
这是基于一些早期注释概念的功能。 这个功能非常快。
CREATE FUNCTION [dbo].[IsGuid] (@input varchar(50))
RETURNS bit AS
BEGIN
RETURN
case when @input like ‘[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]’
then 1 else 0 end
END
GO
/*
Usage:
select [dbo].[IsGuid](‘123’) — Returns 0
select [dbo].[IsGuid](‘ebd8aebd-7ea3-439d-a7bc-e009dee0eae0’) — Returns 1
select * from SomeTable where dbo.IsGuid(TableField) = 0 — Returns table with all non convertable items!
*/
Ansonmus answered 2020-01-23T02:30:23Z
1 votes
虽然是较早的帖子,但只是想快速测试一下…
SELECT [A].[INPUT],
CAST([A].[INPUT] AS [UNIQUEIDENTIFIER])
FROM (
SELECT ‘5D944516-98E6-44C5-849F-9C277833C01B’ Collate Latin1_General_100_BIN AS [INPUT]
UNION ALL
SELECT ‘{5D944516-98E6-44C5-849F-9C277833C01B}’
UNION ALL
SELECT ‘5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’
UNION ALL
SELECT ‘{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss’
UNION ALL
SELECT ‘ÀD944516-98E6-44C5-849F-9C277833C01B’
UNION ALL
SELECT ‘fish’
) [A]
WHERE PATINDEX(‘[^0-9A-F-{}]%’, [A].[INPUT]) = 0
Geary M. McIver answered 2020-01-23T02:30:43Z
0 votes
您可以编写自己的UDF。 这是一个简单的近似值,以避免使用SQL-CLR程序集。
CREATE FUNCTION dbo.isuniqueidentifier (@ui varchar(50))
RETURNS bit AS
BEGIN
RETURN case when
substring(@ui,9,1)=’-‘ and
substring(@ui,14,1)=’-‘ and
substring(@ui,19,1)=’-‘ and
substring(@ui,24,1)=’-‘ and
len(@ui) = 36 then 1 else 0 end
END
GO
然后,您可以对其进行改进,以检查它是否仅与十六进制值有关。
pcofre answered 2020-01-23T02:31:08Z
0 votes
我用 :
ISNULL(convert(nvarchar(50), userID), ‘NULL’) = ‘NULL’
Villie answered 2020-01-23T02:31:27Z
0 votes
我有一些用AutoFixture生成的Test用户,默认情况下,这些用户使用GUID生成字段。 我需要删除的用户的“我的名字”字段是GUID或uniqueidentifier。 我就是这样结束的。
我能够将您的一些答案汇总到此。
SELECT UserId FROM [Membership].[UserInfo] Where TRY_CONVERT(uniqueidentifier, FirstName) is not null
Don Rolling answered 2020-01-23T02:31:56Z
0 votes
将RLIKE用于MySQL
SELECT 1 WHERE @StringToCompare
RLIKE REPLACE(‘00000000-0000-0000-0000-000000000000’, ‘0’, ‘[0-9a-fA-F]’);
ks1bbk answered 2020-01-23T02:32:16Z
本文由 贵州做网站公司 整理发布,部分图文来源于网络,如有侵权,请联系我们删除,谢谢!
SEO小店网站优化 能带来大量精准流量的网站才是好网站,小店网络公司SEO优化推广可以为企业网站带来大量的有效流量。 ...
汉寿网站排名快速提升 汉寿网络公司快速提升企业网站排名,通过网站优化推广,让汉寿企业网站在搜索引擎的排名长期稳定。 ...
SEO张家界网站优化 能带来大量精准流量的网站才是好网站,张家界网络公司SEO优化推广可以为企业网站带来大量的有效流量。 ...
手机按钮失灵了什么原因?1.手机因后台程序太多而卡死。大家都知道Android后台进程太多,占用内存很大。这时候手机会卡死,导致按键不灵敏。很多人以为是按钮坏了,其实是系统卡住了。解决方法:清空手机中APP的缓存,关闭不必要的程序,释放更多存储空间。2.灰尘进入电源键和音量键之间的缝隙。灰尘经常进入手机的USB接口。虽然电源键和音量键的缝隙很小,但是久而久之也会进入很多灰尘。而且从表面看不出灰尘会...
淘宝的特价是怎样设置出来的?1、先打开淘宝首页,直接点击右上角“卖家中心”,输入账号密码,刚刚进入商家后台;2、左侧找到“店铺营销工具”,点击进入,找不到“单品宝”,再点击进入;3、再点击“刚建活动”;4、按步骤如何填写活动名称、活动时间等(注:活动时间最长可设置中180天),如需折扣商品只有那一个价格即选择“商品级”,如有多个完全不同价格即选择类型“SKU级”;5、选择类型要折扣的活动商品,直接...
神奇宝贝吧神奇宝贝日月共有多少集?本季共有147集。下一季《剑盾》将于今年11月17日上映。《神奇宝贝剑顿》共157集。2022年2月4日,第九代王室成员将获释。下一季,游戏和卡通片将会上映。下一季,《神奇宝贝》将于2022年11月17日上映。这个赛季要到2022年11月15日才能结束。此外,第九代将于2022年11月17日和下一季开放。第九代王室将于2022年2月18日开播游戏和卡通片本季共有1...