我正在使用mysql。
我有一个值如下的列:
Set param = db.CreateParameter("@screenDate", 135, 1, 20, CDate("31/12/9999"))
param.NumericScale = 3
db.Parameters.Append param
实际上可以转换这些值。例如:
"50 000 - 100 000 |##| 300 000 - 400 000"
对我而言,它需要的意思是"300 000 - 400 000 |##| 50 000 - 100 000"
。
然后我需要在sql中比较它并检查是否有这个列:
50 000 - 400 000
这样的事情是否可能?
感谢您的帮助
答案 0 :(得分:1)
这将为您获取范围内的最小值和最大值: -
SELECT MIN(aValue) AS range_start,
MAX(aValue) AS range_end
FROM
(
SELECT CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(REPLACE(some_column, ' - ', ','), ' |##| ', ','), ' ', ''), ',', tens.aCnt * 10 + units.aCnt + 1), ',', -1) AS UNSIGNED) AS aValue
FROM some_table
CROSS JOIN (SELECT 1 AS aCnt UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0) units
CROSS JOIN (SELECT 1 AS aCnt UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0) tens
) sub0
这使用REPLACE来消除不需要的额外格式,并使用带逗号的REPLACEing空格将其转换为以逗号分隔的列表。然后使用几个固定查询交叉连接,以获取1到100之间的值列表,并使用它来拆分逗号分隔列表。所有用作
上使用MIN和MAX的子查询的结果