SQL 服务器在 SQL 中为奇数/偶数检查抛出错误
SQL Server throwing error in SQL for Odd / Even check
我有一个 SQL 服务器数据库,当我添加对偶数或奇数值的检查时,它在我的 table 之一上抛出错误。
这是一个会导致错误的示例脚本:
SELECT TOP 5 *
FROM [TABLE_QUALIFIER].[TABLE_OWNER].[TABLE_NAME] WITH (nolock)
WHERE street_number BETWEEN '1' AND '5000'
AND (street_number % 2) > 0
AND street_name LIKE '%Main St%'
ORDER BY CAST(street_number AS float);
如您所见,我有这段语句检查奇数结果:
AND (street_number % 2) > 0
如果我去掉这部分调用,我得到一个成功的查询结果。但是,在这种情况下,我需要包括对奇数街道号码结果的检查。
当我使用此命令检查 table 信息时:
exec sp_columns [TABLE_NAME];
我可以看到 street_number
列被保存为 varchar
类型。在 SQL 语句中,您可以看到我将 street_number
值转换为浮点数。
关于如何修改此 SQL 查询以消除检查奇数 street_number
时的错误的任何建议?
附加信息:
Microsoft SQL Server 2017 (RTM-CU19) (KB4535007) - 14.0.3281.6 (X64) 2020 年 1 月 23 日 21:00:04 版权所有 (C) 2017 Microsoft Corporation 标准版(64 位)在 Windows Server 2016 Datacenter 10.0(内部版本 14393:)(管理程序)
这是一个概念性的例子。它包括 DDL 和示例数据填充。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, street_number VARCHAR(10), street_name VARCHAR(50));
INSERT INTO @tbl (street_number, street_name) VALUES
('1', 'Main St.'),
('10', 'Not so Main St.'),
('20', 'Wall St.'),
('10A', 'Wall St.');
-- DDL and sample data population, end
;WITH rs AS
(
SELECT ID, street_name
, TRY_CAST(street_number AS INT) AS street_no
FROM @tbl
)
SELECT TOP(5) *
FROM rs
WHERE street_no BETWEEN 1 AND 5000
AND (street_no % 2) > 0
AND street_name LIKE '%Main St%'
ORDER BY street_no;
输出
+----+-------------+-----------+
| ID | street_name | street_no |
+----+-------------+-----------+
| 1 | Main St. | 1 |
+----+-------------+-----------+
我有一个 SQL 服务器数据库,当我添加对偶数或奇数值的检查时,它在我的 table 之一上抛出错误。
这是一个会导致错误的示例脚本:
SELECT TOP 5 *
FROM [TABLE_QUALIFIER].[TABLE_OWNER].[TABLE_NAME] WITH (nolock)
WHERE street_number BETWEEN '1' AND '5000'
AND (street_number % 2) > 0
AND street_name LIKE '%Main St%'
ORDER BY CAST(street_number AS float);
如您所见,我有这段语句检查奇数结果:
AND (street_number % 2) > 0
如果我去掉这部分调用,我得到一个成功的查询结果。但是,在这种情况下,我需要包括对奇数街道号码结果的检查。
当我使用此命令检查 table 信息时:
exec sp_columns [TABLE_NAME];
我可以看到 street_number
列被保存为 varchar
类型。在 SQL 语句中,您可以看到我将 street_number
值转换为浮点数。
关于如何修改此 SQL 查询以消除检查奇数 street_number
时的错误的任何建议?
附加信息:
Microsoft SQL Server 2017 (RTM-CU19) (KB4535007) - 14.0.3281.6 (X64) 2020 年 1 月 23 日 21:00:04 版权所有 (C) 2017 Microsoft Corporation 标准版(64 位)在 Windows Server 2016 Datacenter 10.0(内部版本 14393:)(管理程序)
这是一个概念性的例子。它包括 DDL 和示例数据填充。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, street_number VARCHAR(10), street_name VARCHAR(50));
INSERT INTO @tbl (street_number, street_name) VALUES
('1', 'Main St.'),
('10', 'Not so Main St.'),
('20', 'Wall St.'),
('10A', 'Wall St.');
-- DDL and sample data population, end
;WITH rs AS
(
SELECT ID, street_name
, TRY_CAST(street_number AS INT) AS street_no
FROM @tbl
)
SELECT TOP(5) *
FROM rs
WHERE street_no BETWEEN 1 AND 5000
AND (street_no % 2) > 0
AND street_name LIKE '%Main St%'
ORDER BY street_no;
输出
+----+-------------+-----------+
| ID | street_name | street_no |
+----+-------------+-----------+
| 1 | Main St. | 1 |
+----+-------------+-----------+