gpt4 book ai didi

sql-server - T-SQL 确定性 INT 转换

转载 作者:行者123 更新时间:2023-12-03 18:47:17 24 4
gpt4 key购买 nike

给定:

  • SQL Server
  • 表名为 TEST_TABLE
  • TEST_TABLE 中名为 TEST_FIELD 的列 VARCHAR(50) NOT NULL
  • 第 1 行:10YR3/6
  • 第 2 行:10YR3/2
  • 查询:SELECT TEST_FIELD FROM TEST_TABLE WHERE ...

问题:

在我的 where 条件下,我需要测试字符串最后一个字符中的值。我注意到相同的行为在 Where 子句中执行以下操作。

  1. RIGHT(TEST_FIELD,1) > 3
  2. CAST(RIGHT(TEST_FIELD,1) AS INT) > 3

在案例 1 中,通过某些推断的转换,它们的行为是否相同?情况 1 是确定性的吗?

提前致谢。

马特

最佳答案

例如,当您检查值时完成转换:

DECLARE @t varchar(100)

SET @t = (SELECT 'ABCA2')

SELECT @t

IF RIGHT(@t, 2) > 10
SELECT 'Hi'
ELSE
SELECT 'Bye'

将抛出错误,因为 SQL 无法在不抛出错误的情况下将 A2 转换为整数。

但是,如果您将 @t 替换为:

SET @t = (SELECT 'ABC12')

上面的代码将在转换成功时起作用,并且可以进行比较。正确的功能本身不会转换你的值(value)。 MSDN 明确规定了 RIGHT() 的返回类型:

Returns varchar when character_expression is a non-Unicode character data type.

Returns nvarchar when character_expression is a Unicode character data type.

为了让您自己更轻松,完全删除函数 RIGHT(),例如在与文本进行比较时:

DECLARE @t varchar(100)

SET @t = (SELECT '1')

SELECT @t

IF @t < 10
SELECT 'Hi'
ELSE
SELECT 'Bye'

请注意,我没有调用 Right()。上面的结果是显示1,然后是文本Hi。

关于sql-server - T-SQL 确定性 INT 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8606801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com