mysql uniqueidentifier,sql-如何检查字符串是否为uniqueidentifier?

mysql uniqueidentifier,sql-如何检查字符串是否为uniqueidentifier?sql-如何检查字符串是否为uniqueidentifier?是否有与IsDate或IsNumeric等效的uniqueidentifier(SQLServer)?还是有等同于(C#)TryParse的东西?否则,我将不得不编写自己的函数,但是我想确保自己没有重新发明轮子。我要介绍的场景如下:SELECTsomethingFROMtableWHEREIsUniqueidentifier…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195892.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sklearn库主要模块功能简介

    sklearn库主要模块功能简介数据科学系列:sklearn库主要模块功能简介01sklearn简介sklearn,全称scikit-learn,是python中的机器学习库,建立在numpy、scipy、matplotlib等数据科学包的基础之上,涵盖了机器学习中的样例数据、数据预处理、模型验证、特征选择、分类、回归、聚类、降维等几乎所有环节,功能十分强大,目前sklearn版本是0.23。与深度学习库存在pytorch、TensorFlow等多种框架可选不同,sklearn是python中传统机器学习的首选库,不存在其他竞争

    2022年10月18日
    0
  • js indexOf 的正确用法「建议收藏」

    js indexOf 的正确用法「建议收藏」indexOf在js中有着重要的作用,可以判断一个元素是否在数组中存在,或者判断一个字符是否在字符串中存在,如果存在返回该元素或字符第一次出现的位置的索引,不存在返回-1。例如vararr=[1,2,3];console.log(arr.indexOf(2));//打印结果为1又或者varstr=”helloworld”;console.log(str.indexOf(“w”));//打印结果为5那么,当想删除某个数组中的某个元素时,常常会这么

    2022年7月26日
    7
  • APAP论文阅读笔记[通俗易懂]

    APAP论文阅读笔记[通俗易懂]As-Projective-As-PossibleImageStitchingwithMovingDLT论文阅读笔记论文和代码可以在这个网址找到:https://cs.adelaide.edu.au/~tjchin/apap/一、全文翻译题目:使用移动DLT进行尽可能投影的图像拼接摘要:我们专注于图像拼接的任务,通常通过估计投影扭曲来解决这一问题——当场景是平面的或当视图完全因旋转而不同时,该模型是合理的。这样的条件在实践中很容易被违反,这就产生了使用重影人工制品的缝合结果,这就需要使用去

    2022年9月22日
    0
  • 遍历ArrayList、遍历Map

    遍历ArrayList、遍历Map标题遍历ArrayList1.使用For-Each遍历List2.把链表变为数组相关的内容进行遍历3.使用迭代器进行相关遍历(这个最好)importjava.util.*;//firstmethodList<String>list=newArrayList<String>();list.add(“Hello”);list.add(“Hi”);list.add(“Bye”);for(Stringstr:list){ System.ou

    2022年7月22日
    11
  • 前工程师讲解:开关电源设计-LLC电源

    前工程师讲解:开关电源设计-LLC电源很多最初接触电源的朋友,都是从开关电源设计来进行入门学习的。期间不仅要查阅大量的资料,还要对这些资料进行筛选和整理,比较耗费时间和精力。为此,小编将一名前工程师的开关电源设计经验进行了整理,希望能帮助大家加快自学的步伐。      原本在本篇文章当中将为大家讲解关于EMI、尖峰电压处理等方面的知识,但是这些知识的整体思路在开关电源的各类拓扑当中都是互通的,所以转而对主拓扑进行介绍。

    2022年5月22日
    34
  • 微软新的版本发布模式将把 Win 10 玩出碎片化?

    微软新的版本发布模式将把 Win 10 玩出碎片化?

    2021年6月20日
    168

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号