Sql-Server
刪除字元串前綴
我有一串數字,我需要從使用 TSQL 中刪除一部分。
一串數字將始終以
101
然後它將有一組0s
和一組隨機數開始。例子:1010000123456
我需要修剪 101 和一組零。這可能很簡單,但我遇到了各種各樣的問題,因為我沒有特定的字元來引用使用 a並且當我需要保留的隨機數開始時,
CHARINDEX
a 的可能組合給我使用 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 數字到最後。)
還有其他方法可以做到這一點,例如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