0
我有一个名为year varchar(100)
的列表。此列可以包含像MySql仅选择数字并从varchar列中排列它们
Year
-------
1901
0
circa 12580
125d4 great
year 1012
3411 standard
12
saf
1234
现在我想通过Year
升序或在Year
领域找到第4位下降到订单数据。我想:
- 仅获得这些列的有4个或多个数字(单独或与 一些字符串)
- 提取前4位数字(如果超过4个或一些整数)或获得4位数(如果列仅有4位值),基于上述两个条件
我想我的结果按升序排列设置像
Year
1012
1234
1258
1901
3411
反之亦然按降序排列。
我曾尝试以下操作:
SELECT *
FROM table
WHERE YEAR REGEXP '^[0-9]+$' AND LENGTH(YEAR) = 4
ORDER BY CAST(YEAR AS UNSIGNED) DESC;
但这只会返回他们只有4个数字和订单列,但还不如我上面提到的结果。
最好的做法是创建与诠释一个新列年,并按此排序。您可能会成功建立一个查询来按提取的正则表达式进行排序,但它不会使用索引(如果有很多行,这很重要)。如果您的查询不是生产应用程序,您可以创建一个临时表,使用旧表中的所有行和规范化的年份值填充它,然后对其进行正常排序。 –
@DanIonescu我现在正在生产,我现在不能创建列 –
好的,所以查询是针对应用程序的,或者它只是一次分析数据的一次? –