Sql-Server

刪除字元串前綴

  • July 31, 2014

我有一串數字,我需要從使用 TSQL 中刪除一部分。

一串數字將始終以101然後它將有一組0s和一組隨機數開始。例子:

1010000123456

我需要修剪 101 和一組零。這可能很簡單,但我遇到了各種各樣的問題,因為我沒有特定的字元來引用使用 a並且當我需要保留的隨機數開始時,CHARINDEXa 的可能組合給我使用 a with的問題一個。001``PATINDEX``SUBSTRING

SUBSTRING(n, 3+PATINDEX('%[^0]%', SUBSTRING(n, 4, LEN(n))), LEN(n))表達式應該有效。

  • 首先,它會去除前 3 個字元:SUBSTRING(n, 4, LEN(n))
  • 然後它PATINDEX()'%[^0]%'模式一起使用來定位 0 之後的數字開始的位置:PATINDEX('%[^0]%', SUBSTRING(n, 4, LEN(n)))
  • 然後它使用SUBSTRING()和先前找到的數字 (+3),只保留想要的數字(從找到的 patindex 數字到最後。)

SQL-Fiddle進行測試

還有其他方法可以做到這一點,例如STUFF或只是一些簡單的整數數學,但這些確實對字元串做出了某些假設,例如

DECLARE @t TABLE ( rowId INT IDENTITY PRIMARY KEY, yourString CHAR(13) )

INSERT INTO @t VALUES 
   ( 1010000123456 ),
   ( 1010001234567 ),
   ( 1010012345678 ),
   ( 1010123456789 ),
   ( 1011234567890 )

SELECT
   CAST( STUFF( yourString, 1, 3, 0 )  AS INT ) [stuff],   -- 2 functions
   CAST( yourString  AS BIGINT ) - 1010000000000 do_math,  -- 1 function
   SUBSTRING(yourString, 3+PATINDEX('%[^0]%', SUBSTRING(yourString, 4, LEN(yourString))), LEN(yourString)) AS ypercube     -- 5 functions
FROM @t

引用自:https://dba.stackexchange.com/questions/72850