Sql-Server
SQL Server 的 T-SQL 中的 C++ stoi 等效項
我正在尋找可以在 Microsot SQL Server 中使用的東西,它的行為方式與 C++ 中的 stoi 函式的行為方式相同。具體來說,我希望能夠在字元串的開頭獲取數字,然後忽略非數字。我需要它來對以下字元串進行排序,並需要它們按以下順序顯示:
99ABC 123ABCD ABC DEFGH
所以我在想,如果我有類似 STOI 的東西,我可以這樣做:
ORDER BY CASE WHEN (ISNUMERIC(LEFT(TEXT, 1))) THEN STOI(TEXT) ELSE 999999 END, TEXT
我可以預先計算 STOI 的結果(或上述 CASE 語句的結果)並每晚儲存到一個額外的 INT 列中。所以我並不真正關心實時性能。我想我只是在尋找一種方法,而不必檢查字元串的所有字元:
DECLARE @numEnd INT = 0 WHILE (ISNUMERIC(LEFT(TEXT, @numEnd)) BEGIN SET @numEnd = @numEnd + 1 END DECLARE @stoi INT = CAST(LEFT(TEXT, @numEnd) AS INT)
DECLARE @Test VARCHAR(32) SET @Test = '99ABC 123ABCD ABC DEFGH' DECLARE @stoi INT = TRY_CONVERT(INT, LEFT(LTRIM(@Test), PATINDEX('%[^0123456789]%', LTRIM(@Test + ';')) - 1)) SELECT @stoi
99