sql >> データベース >  >> RDS >> Sqlserver

SQLServer2008-数値を含む文字列による順序

    以下のようにPATINDEX()関数を使用してそれを行うことができます:

    select * from Test 
    order by CAST(SUBSTRING(Name + '0', PATINDEX('%[0-9]%', Name + '0'), LEN(Name + '0')) AS INT)
    

    SQLフィドルデモ

    文字列の途中に数字がある場合は、文字列から数字を取得し、以下のようにその数字に基づいてデータを並べ替える小さなユーザー定義関数を作成する必要があります:

    CREATE FUNCTION dbo.fnGetNumberFromString (@strInput VARCHAR(255)) 
    RETURNS VARCHAR(255) 
    AS 
    BEGIN 
        DECLARE @intNumber int 
        SET @intNumber = PATINDEX('%[^0-9]%', @strInput)
    
        WHILE @intNumber > 0
        BEGIN 
            SET @strInput = STUFF(@strInput, @intNumber, 1, '')
            SET @intNumber = PATINDEX('%[^0-9]%', @strInput)
        END 
    
        RETURN ISNULL(@strInput,0) 
    END 
    GO
    

    データは次のように並べ替えることができます:

    select Name from Test order by dbo.fnGetNumberFromString(Name), Name
    


    1. ubuntulinuxでMySqlルートパスワードコマンドラインをリセット/変更する方法

    2. Oracleデータベース列の特定の値を置き換える方法は?

    3. パフォーマンスの驚きと仮定:DATEADD

    4. プロアクティブなSQLServerヘルスチェック、パート4:エラーログ