SQL BETWEEN 命令不适用于大范围
SQL BETWEEN command not working for large ranges
SQL 命令 BETWEEN 仅在我为列指定一个小范围时才有效。
这就是我的意思:
我的代码:
import AzureSQLHandler as sql
database_layer = sql.AzureSQLHandler()
RESULTS_TABLE_NAME = "aero2.ResultDataTable"
where_string = " smog BETWEEN '4' AND '9'"
print database_layer.select_data(RESULTS_TABLE_NAME, "*", where_string)
对应SQL命令:
SELECT *
FROM aero2.ResultDataTable
BETWEEN '4.0' AND '9.0'
和 select_data return 是一个包含所有这些行的二维数组。
我在这里引用的列已经保存了所有等于 5.0 的值。
这很好用!
但是,当我将范围增加到例如“4.0”和“200.0”时,它不会 return 任何东西。
数据库中的字符串按字母顺序比较。字符串 '4.0'
大于字符串 '200.0'
,因为字符 4
位于字符 2
之后。如果你需要支持这种查询,你应该在你的数据库中使用数字类型。确保 smog
列具有数字类型(例如 DOUBLE)并在查询中使用 BETWEEN 4.0 AND 200.0
。
如果您无法更改架构,您可以使用 CAST
:cast(smog as DOUBLE) BETWEEN 4.0 and 200.0
,但此解决方案效率较低。
SQL 命令 BETWEEN 仅在我为列指定一个小范围时才有效。 这就是我的意思:
我的代码:
import AzureSQLHandler as sql
database_layer = sql.AzureSQLHandler()
RESULTS_TABLE_NAME = "aero2.ResultDataTable"
where_string = " smog BETWEEN '4' AND '9'"
print database_layer.select_data(RESULTS_TABLE_NAME, "*", where_string)
对应SQL命令:
SELECT *
FROM aero2.ResultDataTable
BETWEEN '4.0' AND '9.0'
和 select_data return 是一个包含所有这些行的二维数组。
我在这里引用的列已经保存了所有等于 5.0 的值。
这很好用!
但是,当我将范围增加到例如“4.0”和“200.0”时,它不会 return 任何东西。
数据库中的字符串按字母顺序比较。字符串 '4.0'
大于字符串 '200.0'
,因为字符 4
位于字符 2
之后。如果你需要支持这种查询,你应该在你的数据库中使用数字类型。确保 smog
列具有数字类型(例如 DOUBLE)并在查询中使用 BETWEEN 4.0 AND 200.0
。
如果您无法更改架构,您可以使用 CAST
:cast(smog as DOUBLE) BETWEEN 4.0 and 200.0
,但此解决方案效率较低。