Sql-Server

SQL Server 的 T-SQL 中的 C++ stoi 等效項

  • August 23, 2018

我正在尋找可以在 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

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