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)
上一篇 2025年10月8日 下午1:15
下一篇 2025年10月8日 下午1:43


相关推荐

  • wing是什么_计算二叉树的深度和叶子结点数

    wing是什么_计算二叉树的深度和叶子结点数设一个 n 个节点的二叉树 tree 的中序遍历为(1,2,3,…,n),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 i 个节点的分数为 di,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下:subtree的左子树的加分 × subtree的右子树的加分 + subtree的根的分数若某个子树为空,规定其加分为 1。叶子的加分就是叶节点本身的分数,不考虑它的空子树。试求一棵符合中序遍历为(1,2,

    2022年8月9日
    10
  • Android学习路线:如何成长为高级工程师

    Android学习路线:如何成长为高级工程师博主参加了 2014CSDN 博客之星评选 帮我投一票吧 点击给我投票前言之所以写这篇文章 是因为最近博客和我的开发群 nbsp nbsp 中 不少小伙伴都让我讲讲 android 学习路线 所以我决定写一篇博客 来说明这个问题 既然有不少小伙伴来咨询这个问题 说明大家都还是想快速地提高技术 毕竟技术的提高是职业发展中不可或缺的一步 技术好了 才能得到认可 才能升职加薪 一般来说 快速提高技术是不太

    2026年3月19日
    2
  • 【OpenGrok代码搜索引擎】三、OpenGrok常用命令

    【OpenGrok代码搜索引擎】三、OpenGrok常用命令写在前面为了防止一些无法预料的情况发生,建议在完成代码项目索引创建后对索引生成器(indexer)生成的配置文件configuration.xml进行备份。一、免配置方法可以使用一个OpenGrokDocker容器,该容器包含了OpenGrok配置环境,但需要注意的是,该容器不适合大型的代码项目。详细参考链接如下:opengrok/dockeratmaster·oracle/opengrok·GitHubDockerHub二、常用命令2…

    2022年4月29日
    129
  • java正则表达 替换_java正则表达式替换

    java正则表达 替换_java正则表达式替换java正则表达式替换[@more@]//正则表达式替换–尾部为空格或者;Stringregex=”#w+((s)|(;)|()))”;Patternpattern=Pattern.compile(regex);Matchermatcher=pattern.matcher(sql);StringBuffersbf=newStringBuffer();while(matc…

    2022年5月16日
    45
  • linux中的两个命令setfacl和chmod有什么区别

    linux中的两个命令setfacl和chmod有什么区别

    2021年10月15日
    34
  • mathtype大括号三个公式_latex大括号左对齐

    mathtype大括号三个公式_latex大括号左对齐数学方程输入对于很多理工科朋友来说是一件让人头疼的事情。不仅是数学方程本身就纷繁复杂花样百出,各种输入语法更是劝退无数人。然而很多看似复杂的东西其实并非如想象中的难,抓住本质即可快速入门。今天和大家分享下如何快速入门LaTeX,在XMind2020中轻松输入方程。01LaTeX是什么LaTeX是一种基于ΤΕΧ的排版系统,具有方便而强大的数学公式排版能力。日常中大家常见的高印刷质量的…

    2022年10月10日
    4

发表回复

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

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