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

複雑な種類のフィールド文字列-数値-文字列

    このソリューションは、選択した回答よりも信頼性があります。駅に「EPAWELL57」のような番号が複数ある場合、この回答では期待どおりの回答が得られない場合があります。このソリューションでは、数値に「0」を埋め込んでいるため、比較ではすべての数値が8桁と見なされます。

    DECLARE  @Table1 table([station] varchar(26))
    
    INSERT INTO @Table1
        ([station])
    VALUES
        ('ANTIL WELL 2'),
        ('ANTIL WELL 1'),
        ('BASELINE & CALIFORNIA WELL'),
        ('EPA WELL 7'),
        ('EPA WELL 6'),
        ('EPA WELL 108'),
        ('EPA WELL 109'),
        ('EPA WELL 110'),
        ('EPA WELL 111'),
        ('EPA WELL 112'),
        ('EPA WELL 108S'),
        ('EPA WELL 111108')
    ;
    
    SELECT station
    FROM @table1
    ORDER BY 
    CASE WHEN station not like '%[0-9]%' THEN station ELSE
       STUFF(station, PATINDEX('%[0-9]%',station), 0, replicate('0', 
       PATINDEX('%[0-9]%',station) - len(station) + PATINDEX('%[0-9]%',reverse(station)) + 6))
    END
    

    *GoatCDの回答ではテストデータの順序が正しくありません。



    1. 相関サブクエリでMySQLの移動平均を計算するにはどうすればよいですか?

    2. Oracleにタイムスタンプを挿入する方法は?

    3. 依存オブジェクトがある場合にpostgresでユーザーをドロップする方法

    4. PostgreSQLの外部キー+テーブル継承?