首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PATINDEX的简单解释

PATINDEX的简单解释
EN

Stack Overflow用户
提问于 2015-02-10 10:44:03
回答 3查看 2K关注 0票数 1

我一直在阅读PATINDEX,试图了解什么和为什么。我理解当使用通配符时,它将返回一个INT,说明该字符出现/启动的位置。所以:

代码语言:javascript
复制
SELECT PATINDEX('%b%', '123b') -- returns 4

然而,我想看看是否有人能解释为什么你会用一种简单的(Ish)方式来使用它。我读过其他一些论坛,但老实说,它并没有沉入其中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-10 11:53:09

你要求的是实际的用例吗?我可以想到两个真实的用例,在我的工作中,PATINDEX()是我最好的选择。

后来,我不得不导入一个文本文件并为INSERT INTO解析它。但是,这些文件有时有这种格式的数字:00000-59。如果您尝试CAST('00000-59' AS INT),您将得到一个错误。因此,我需要将00000-59解析为-59的代码,也需要将00000159解析为159等的代码。-可能在任何地方,也可能根本不存在。我就是这样做的:

代码语言:javascript
复制
DECLARE @my_var VARCHAR(255) = '00000-59', @my_int INT

SET @my_var = STUFF(@my_var, 1, PATINDEX('%[^0]%', @my_var)-1, '')
SET @my_int = CAST(@my_var AS INT)

在本例中,[^0]的意思是“不是a0__的任何字符”。所以PATINDEX()告诉我0的结束时间,不管是因为-还是数字。

我遇到的第二个用例是检查伊班号码是否正确。为此,IBAN中的任何字母都需要更改为相应的数字(A=10、B=11等.)。我做了这样的事情(不完整,但你明白):

代码语言:javascript
复制
SET @i = PATINDEX('%[^0-9]%', @IBAN)
WHILE @i <> 0 BEGIN
  SET @num = UNICODE(SUBSTRING(@IBAN, @i, 1))-55
  SET @IBAN = STUFF(@IBAN, @i, 1, CAST(@num AS VARCHAR(2))
  SET @i = PATINDEX('%[^0-9]%', @IBAN)
END

所以,我也不关心找到准确的字母AB等等。我只是找到任何不是数字的东西,并转换它。

票数 1
EN

Stack Overflow用户

发布于 2015-02-10 11:08:03

PATINDEX大致等同于CHARINDEX,只不过它返回模式的位置而不是单个字符。示例:

检查字符串是否至少包含一个数字:

代码语言:javascript
复制
SELECT PATINDEX('%[0-9]%', 'Hello') -- 0
SELECT PATINDEX('%[0-9]%', 'H3110') -- 2

从字符串中提取数字部分:

代码语言:javascript
复制
SELECT SUBSTRING('12345', PATINDEX('%[0-9]%', '12345'), 100) -- 12345
SELECT SUBSTRING('x2345', PATINDEX('%[0-9]%', 'x2345'), 100) -- 2345
SELECT SUBSTRING('xx345', PATINDEX('%[0-9]%', 'xx345'), 100) -- 345
票数 1
EN

Stack Overflow用户

发布于 2015-02-10 11:17:20

引用自PATINDEX (Transact-SQL)

下面的示例使用%_通配符查找模式'en'的位置,后面跟着任何一个字符,'ure'在指定的字符串中开始(索引从1开始):

代码语言:javascript
复制
SELECT PATINDEX('%en_ure%', 'please ensure the door is locked');

这是结果集。

代码语言:javascript
复制
8

当您想知道模式以有效文本或字符数据类型的表达式开始于哪个字符位置时,可以使用PATINDEX函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28429670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档