【发布时间】:2013-09-10 03:24:46
【问题描述】:
我正在检查我对 SSMS 版本 2008 中的 SUBSTRING 的理解。
我不知道 start_expression 是基于 0 还是 1,如果是基于 0,我不明白允许 start_expression 为 0 的目的。
我运行了查询;
DECLARE @Test VARCHAR(5) = 'Hello'
SELECT @Test, SUBSTRING(@Test, 1, 4), 'What the ' + SUBSTRING(@Test, 0, 5) + '?', + SUBSTRING(@Test, -1, 6)
产生结果的;
你好,到底是什么?地狱
现在 SQL Server 2008 BOL 状态;
start_expression 是一个整数或 bigint 表达式,它指定 返回的字符从哪里开始。 如果 start_expression 小于 0,产生错误并终止语句。如果 start_expression 大于值中的字符数 表达式,返回一个长度为零的表达式。
甚至更高版本的 2008R2 或 2012 都表明;
如果 start_expression 小于 1,则返回的表达式将 从 value_expression 中指定的第一个字符开始。
然而,我上面的 SQL 语句的最后一列允许我从 -1 开始并提取 6 个字符。
我尝试过的两台服务器都运行 2008 R2(一个 (SP2) - 10.50.4000.0 (X64) 和另一个 R2 (RTM) - 10.50.1600.1 (X64))
所以我的问题是 - 是什么决定了通过 SSMS 执行的 SQL 版本?是 SSMS 版本本身、数据库服务器、数据库(我执行此操作的数据库之一是在 2005 兼容模式下的 2008 服务器上)?
另外,关于 0 或更少的起始位置的文档是否有误,或者我的解释是否错误?
【问题讨论】:
标签: sql-server-2008 tsql substring ssms