Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从mysql文本字段提取数据并按其排序-可能吗?_Mysql - Fatal编程技术网

从mysql文本字段提取数据并按其排序-可能吗?

从mysql文本字段提取数据并按其排序-可能吗?,mysql,Mysql,假设我有以下几行: id data (TEXT) 1 abc"100"dfg 2 abc"200"dfg 3 abc"150"dfg 是否可以按引号中的数字(abc“X”dfg)对结果排序并返回数字?如果数字字段始终位于您可以写入的同一位置 SELECT *,SUBSTRING(`data`,4,3) AS num FROM table ORDER BY num ASC ORDER BY 0 + SUBSTRING(data, 5, 3) ORDER

假设我有以下几行:

id     data (TEXT)
1      abc"100"dfg
2      abc"200"dfg
3      abc"150"dfg

是否可以按引号中的数字(abc“X”dfg)对结果排序并返回数字?

如果数字字段始终位于您可以写入的同一位置

 SELECT *,SUBSTRING(`data`,4,3) AS num FROM table ORDER BY num ASC
ORDER BY 0 + SUBSTRING(data, 5, 3)
ORDER BY 0 + SUBSTRING_INDEX(SUBSTRING_INDEX(data, '"', -2), '"', 1)
或者如果它们总是由字符串中唯一可以写入的双引号绑定

ORDER BY 0 + SUBSTRING(data, 5, 3)
ORDER BY 0 + SUBSTRING_INDEX(SUBSTRING_INDEX(data, '"', -2), '"', 1)

虽然子字符串是数字的,但它们仍然是字符串值,MySQL将按词汇对它们进行排序。对于数字排序,必须通过添加零将其强制为数字值。

如果数字字段始终位于您可以写入的同一位置

ORDER BY 0 + SUBSTRING(data, 5, 3)
ORDER BY 0 + SUBSTRING_INDEX(SUBSTRING_INDEX(data, '"', -2), '"', 1)
或者如果它们总是由字符串中唯一可以写入的双引号绑定

ORDER BY 0 + SUBSTRING(data, 5, 3)
ORDER BY 0 + SUBSTRING_INDEX(SUBSTRING_INDEX(data, '"', -2), '"', 1)

虽然子字符串是数字的,但它们仍然是字符串值,MySQL将按词汇对它们进行排序。对于数值排序,必须通过加零将其强制为数值。

如果引号之间的数字范围为0到1000000,该怎么办?
SUBSTR
的from参数基于1,因此需要
SUBSTR(数据,5,3)
,即使如此,它也只能在数字字段总是相同长度和位置的情况下工作。你可以按照@Borodin所说的去做+1如果引号之间的数字在0到1000000之间,该怎么办?
SUBSTR
的from参数是基于1的,因此您需要
SUBSTR(数据,5,3)
,即使如此,它也只能在数字字段始终相同长度和位置的情况下工作。您可以按照@Borodin所说的做+非常好,谢谢。如果字符串中有更多的引号,但我要查找的数字总是在第二个引号和第三个引号之间,该怎么办?我已经有了一个解决方案,但我只是想知道。你是说像
'aaa“bbb”1234“ccc”ddd'
?SQL确实不擅长这类事情,但是
SUBSTRING\u INDEX(SUBSTRING\u INDEX(data,“,”,3),“,”,-1)
应该可以工作。我已经意识到,目前为止,我的解决方案将按数字字段进行词汇排序,给出类似(100、1000、10000、200、2000)的结果。要进行数字排序,请通过添加0将子字符串强制为数字,如
0+按子字符串排序(数据,5,3)
等。为了反映这一点,我更改了答案。非常好,谢谢。如果字符串中有更多的引号,但我要查找的数字总是在第二个引号和第三个引号之间,该怎么办?我已经有了一个解决方案,但我只是想知道。你是说像
'aaa“bbb”1234“ccc”ddd'
?SQL确实不擅长这类事情,但是
SUBSTRING\u INDEX(SUBSTRING\u INDEX(data,“,”,3),“,”,-1)
应该可以工作。我已经意识到,目前为止,我的解决方案将按数字字段进行词汇排序,给出类似(100、1000、10000、200、2000)的结果。要进行数字排序,可以通过添加0将子字符串强制为数字,如
0+按子字符串排序(数据,5,3)
等。为了反映这一点,我更改了答案。