【问题标题】:Regex number and dashes正则表达式数字和破折号
【发布时间】:2021-03-18 03:39:27
【问题描述】:

我希望在我的LIKE 子句中使用给定条件的正则表达式:

  • 它应该有 13 个长度的字符
  • 前 8 个字符应为数字
  • 第 9 个字符应附加一个破折号 (-)
  • 剩下的 4 个字符是剩下的数字。

例子:

  • 12345678-9123
  • 98765432-1234

目前有这个功能:

CREATE FUNCTION [dbo].[FN_VALIDATE_ID](@TX_INPUT VARCHAR(50))RETURNS BIT AS
BEGIN     
    DECLARE @bitInputVal AS BIT = 1
    DECLARE @InputText VARCHAR(50)

    SET @InputText = LTRIM(RTRIM(ISNULL(@TX_INPUT,'')))
  
    IF @InputText <> '' AND LEN(@InputText) = 13
    BEGIN
        SET @bitInputVal = CASE
                                WHEN @InputText LIKE '%^[0-9]%'  THEN 1
                            ELSE 0 
                            END
    END
  RETURN @bitInputVal
END 

【问题讨论】:

    标签: sql sql-server regex tsql


    【解决方案1】:

    您甚至不需要 UDF,因为 SQL Server 的增强型 LIKE 运算符可以处理此要求:

    SELECT *
    FROM yourTable
    WHERE col LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]';
    --                  \          8 digits              /  -  \   4 digits  /
    

    【讨论】:

    • 谢谢,我首先想到了这一点,并认为还有更好的选择。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多