【SQL Server】文字列型のカラムの中にいる数値を数値として並び替える【CAST/ORDER BY】

  • 2020.11.19
  • SQL
【SQL Server】文字列型のカラムの中にいる数値を数値として並び替える【CAST/ORDER BY】

はじめに

コジマです。

文字列型に数値が入っているのをそのままORDER BYすると文字列として処理され、辞書順に並んでしまいます。

/* 1,10,2,20,3,5 の順で並ぶ */
WITH str_numbers AS (
    SELECT '1' id UNION ALL
    SELECT '2' id UNION ALL
    SELECT '3' id UNION ALL
    SELECT '5' id UNION ALL
    SELECT '10' id UNION ALL
    SELECT '20' id
)
SELECT * FROM str_numbers
ORDER BY id
;

こういうときは、ORDER BY するときにint型にCASTすることで解決します。

/* 1,2,3,5,10,20 の順で並ぶ */
WITH str_numbers AS (
    SELECT '1' id UNION ALL
    SELECT '2' id UNION ALL
    SELECT '3' id UNION ALL
    SELECT '5' id UNION ALL
    SELECT '10' id UNION ALL
    SELECT '20' id
)
SELECT * FROM str_numbers
-- intにCASTする
ORDER BY CAST(id as int)
;

さいごに

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

以上、コジマでした。


SQLカテゴリの最新記事