0

文字列の一部を整数としてソートしようとしていますが、CAST(pid AS SIGNED)成功しません。

この疑似コードのようなものが必要だと思います:CAST ON REGX('^islandora(/d?)$') OF pid AS SIGNED

doFieldsテーブルの構造は次のとおりです。

+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| pid           | varchar(64)  | NO   | MUL | NULL    |       |
| ownerId       | varchar(255) | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+

サンプルデータは次のとおりです。

+----------------+---------+
| pid            | ownerId |
+----------------+---------+
| islandora:1050 | 8       |
| islandora:1052 | 8       |
| islandora:1053 | 8       |
| islandora:1054 | 8       |
| islandora:1055 | 8       |
+----------------+---------+
4

3 に答える 3

3

islandora:単語を置き換えてintにキャストするのはどうですか。

SELECT *
FROM tableName
ORDER BY CAST(REPLACE(pid, 'islandora:', '') AS SIGNED) ASC
于 2012-10-18T07:23:03.940 に答える
2

これを試して:

order by 
       cast(substr(pid,locate(':',pid)+1) as SIGNED)    

整数部分が常に4文字の長さである場合、

  Order by
      cast(right(pid,4) as SIGNED)  
于 2012-10-18T07:22:47.080 に答える
1

この ORDER BY を使用してみてください -

ORDER BY SUBSTRING_INDEX(pid, ':', -1) * 1;
于 2012-10-18T07:32:04.203 に答える