varchar型別的欄位儲存純數字的排序
如果表欄位的型別為varchar型,但是裡面儲存的是純數字,怎麼實現按照數字的大小來排序?
下面的方法對於mysql和oracle都實用
order by 欄位+0
order by 欄位*1
等等都可以實現
mysql> create table tn (id varchar(30),name varchar(50));
mysql> show create table tn;
+-------+-----------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------+
| tn | CREATE TABLE `tn` (
`id` varchar(30) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
mysql> insert into tn values (1,'a');
Query OK, 1 row affected (0.01 sec)
mysql> insert into tn values (10,'b');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (11,'bb');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (2,'bb');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (5,'c');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (3,'f');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (6,'g');
Query OK, 1 row affected (0.00 sec)
mysql> select * from tn;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 10 | b |
| 11 | bb |
| 2 | bb |
| 5 | c |
| 3 | f |
| 6 | g |
+------+------+
使用order by語句進行排序
mysql> select * from tn order by id desc;
+------+------+
| id | name |
+------+------+
| 6 | g |
| 5 | c |
| 3 | f |
| 2 | bb |
| 11 | bb |
| 10 | b |
| 1 | a |
+------+------+
7 rows in set (0.00 sec)
貌似是不起作用,因為id列的值存的是字串型別的
解決:
使用欄位+0解決
mysql> select * from tn order by id+0 desc;
+------+------+
| id | name |
+------+------+
| 11 | bb |
| 10 | b |
| 6 | g |
| 5 | c |
| 3 | f |
| 2 | bb |
| 1 | a |
+------+------+
7 rows in set (0.00 sec)
或者使用 欄位*1解決
mysql> select * from tn order by id*1 desc;
+------+------+
| id | name |
+------+------+
| 11 | bb |
| 10 | b |
| 6 | g |
| 5 | c |
| 3 | f |
| 2 | bb |
| 1 | a |
+------+------+
7 rows in set (0.00 sec)
下面的方法對於mysql和oracle都實用
order by 欄位+0
order by 欄位*1
等等都可以實現
mysql> create table tn (id varchar(30),name varchar(50));
mysql> show create table tn;
+-------+-----------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------+
| tn | CREATE TABLE `tn` (
`id` varchar(30) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
mysql> insert into tn values (1,'a');
Query OK, 1 row affected (0.01 sec)
mysql> insert into tn values (10,'b');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (11,'bb');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (2,'bb');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (5,'c');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (3,'f');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tn values (6,'g');
Query OK, 1 row affected (0.00 sec)
mysql> select * from tn;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 10 | b |
| 11 | bb |
| 2 | bb |
| 5 | c |
| 3 | f |
| 6 | g |
+------+------+
使用order by語句進行排序
mysql> select * from tn order by id desc;
+------+------+
| id | name |
+------+------+
| 6 | g |
| 5 | c |
| 3 | f |
| 2 | bb |
| 11 | bb |
| 10 | b |
| 1 | a |
+------+------+
7 rows in set (0.00 sec)
貌似是不起作用,因為id列的值存的是字串型別的
解決:
使用欄位+0解決
mysql> select * from tn order by id+0 desc;
+------+------+
| id | name |
+------+------+
| 11 | bb |
| 10 | b |
| 6 | g |
| 5 | c |
| 3 | f |
| 2 | bb |
| 1 | a |
+------+------+
7 rows in set (0.00 sec)
或者使用 欄位*1解決
mysql> select * from tn order by id*1 desc;
+------+------+
| id | name |
+------+------+
| 11 | bb |
| 10 | b |
| 6 | g |
| 5 | c |
| 3 | f |
| 2 | bb |
| 1 | a |
+------+------+
7 rows in set (0.00 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2135538/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- varchar or blob:欄位型別的儲存和溢位條件型別
- 在SQL Server中修改欄位型別和欄位名稱的儲存過程SQLServer型別儲存過程
- mysql 字串型別的數值欄位按照數值的大小進行排序MySql字串型別排序
- mysql變長型別欄位varchar值更新變長或變短底層檔案儲存原理MySql型別
- SAP WM中階儲存型別裡的Full stk rmvl 欄位和Return Storage type欄位型別
- MySQL VARCHAR型別欄位到底可以定義多長MySql型別
- mssql sqlserver 可以儲存二進位制資料的欄位型別詳解SQLServer型別
- 保留兩位小數:資料庫欄位型別NUMBER,Java欄位型別Double型別資料庫型別Java
- mysql儲存資料,varchar型別中的資料變成了科學計數法?MySql型別
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- MySQL中欄位型別與合理的選擇欄位型別;int(11)最大長度是多少?varchar最大長度是多少?MySql型別
- oracle的欄位型別Oracle型別
- [BUG反饋]模型中的欄位型別為日期是隻儲存了年份模型型別
- Spark儲存Parquet資料到Hive,對map、array、struct欄位型別的處理SparkHiveStruct型別
- [提問交流]建立模型,新增屬性,欄位型別如何設定2位小數的欄位型別模型型別
- 修改表的欄位型別型別
- Mysql varchar型別欄位為什麼經常定義為255MySql型別
- Js實現Object按照值的某個欄位(數值型別)的大小進行排序JSObject型別排序
- 聯機重定義修改欄位型別(NVARCHAR2->VARCHAR2)型別
- 如何將varchar2修改為clob型別欄位(使用long過渡)型別
- 關於mysql設定varchar 欄位的預設值''和null的區別,以及varchar和char的區別MySqlNull
- MongoDB中的欄位型別IdMongoDB型別
- oracle 修改欄位型別的方法Oracle型別
- MYSQL 資料型別儲存-數值型MySQL 資料型別
- 建立NFS型別的儲存NFS型別
- 【原創】Oracle number date varchar2欄位型別佔用空間大小Oracle型別
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- 保留資料庫表中的資料,把表中的欄位varchar2改成clob型別資料庫型別
- MySQL的varchar儲存原理:InnoDB記錄儲存結構MySql
- 修改欄位資料型別的方法資料型別
- 字元型別的字元儲存與位元組儲存字元型別
- 儲存大容量欄位出現的問題
- MongoDB更改欄位型別MongoDB型別
- Oracle varchar2型別欄位插入插入過長資料丟失問題Oracle型別
- 把非空的欄位number(7,4)的資料合理轉行成varchar2(32)型別型別
- 主流資料庫欄位型別轉.Net型別的方法資料庫型別
- Oracle CHAR,VARCHAR,VARCHAR2,nvarchar型別的區別與使用Oracle型別
- 欄位排序排序