Sql server 将数据类型varchar转换为数字时出错。在下面的sql查询中 选择ltrim(弹性ID+'-'+descr+'($'+max_decrete+'decreible'))descr, 弯曲的 来自[MHCSI]。[FLEX_计划] 其中,groupno='0000080002'由flexid订购;
问题在于,SQL Server假定您要对Sql server 将数据类型varchar转换为数字时出错。在下面的sql查询中 选择ltrim(弹性ID+'-'+descr+'($'+max_decrete+'decreible'))descr, 弯曲的 来自[MHCSI]。[FLEX_计划] 其中,groupno='0000080002'由flexid订购;,sql-server,Sql Server,问题在于,SQL Server假定您要对max\u decrete列执行一个数学函数。因为您真正想要做的是将它与您正在构建的字符串值的其余部分关联起来,所以最简单的解决方案是确保SQL Server了解您想要将列的值用作测试值。可以通过将值显式转换为文本字符串来实现这一点 尝试将您的陈述改写为: SELECT ltrim(flexid + ' - ' + descr + ' ($' + CAST(max_deduct AS nvarchar(50)) + ' deductible
max\u decrete
列执行一个数学函数。因为您真正想要做的是将它与您正在构建的字符串值的其余部分关联起来,所以最简单的解决方案是确保SQL Server了解您想要将列的值用作测试值。可以通过将值显式转换为文本字符串来实现这一点
尝试将您的陈述改写为:
SELECT
ltrim(flexid + ' - ' + descr + ' ($' + CAST(max_deduct AS nvarchar(50)) + ' deductible)') descr
, flexid
FROM
[MHCSI].[FLEX_PLAN]
WHERE
groupno = '0000080002' ORDER BY flexid;
假设您的一列,
flexid
、descr
或max\u decrete
(我怀疑这一列)是一个数字
,因此您的查询失败(对于初学者)'-'
或'deletible')
都不是有效的数值值。问题很可能是SQL Server假设您使用了+
,并且混合使用数值列(可能是max_deletate)意味着您需要进行数学运算。请尝试在查询中使用CAST(max_deletate AS nvarchar())
。+
在T-SQL中既是一个串联运算符,也是一元加法运算符@SchmitzIT。它解释为什么取决于运算符两侧的值。例如,'1'+'2'
返回'12'
,因为两者都是varchar
值<代码>'1'+3
返回4
,因为'1'
首先隐式转换为int
'1'+'2'+3
将返回15
,作为'1'+'2'='12'
,然后在下一个操作中将其隐式转换为int
;我知道她给了拉努15英镑。我自己也不止一次遇到过这样的情况:)我通常使用CONCAT
将事情串在一起,只是为了避免混淆。我想我的“做数学”解释选择得不是很好。CAST(max\u decreate AS nvarchar())
不是有效的语法,您忘了包含长度值。@Larnu-干杯。我没有测试代码。很好:)我更新了答案。无法解决等于操作中“SQL拉丁1\u General\u CP1\u CS\u AS”和“SQL拉丁1\u General\u CP1\u CI\u AS”之间的排序冲突。@ImranHusain-将COLLATE DATABASE\u DEFAULT
添加到等于操作的一侧。即其中a.foo=b.bar校对数据库\u默认值
或其中a.foo校对数据库\u默认值=b.bar
。更多信息: