Sql server 将数据类型varchar转换为数字时出错。在下面的sql查询中 选择ltrim(弹性ID+'-'+descr+'($'+max_decrete+'decreible'))descr, 弯曲的 来自[MHCSI]。[FLEX_计划] 其中,groupno='0000080002'由flexid订购;

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

问题在于,SQL Server假定您要对
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
。更多信息: