我是sql server中的新手。我正在尝试运行以下查询:
SELECT AVG( jl.[Stock Weight] )
FROM [Settlement Line] jl
WHERE jl.[Vendor No_] = 8516
AND ( jl.[Slaughter Date] BETWEEN '2015-11-01' AND '2015-11-30' )
AND ( CAST( jl.[Item No_] AS INT ) BETWEEN 17000 AND 17099 )
结果,我收到了这个错误:
OperationalError:(245,“转换varchar时转换失败 价值'PRISGAR。'
我无法弄清楚这一点。我还不知道PRISGAR
是什么。我也试过了CONVERT
,得到了同样的错误。字段[Item No_]
是varchar(20)
,我尝试将其转换为INT
并检查两个数字。
答案 0 :(得分:2)
从错误中不清楚错误是针对[Vendor No_]
还是[Item No_]
还是jl.[Stock Weight]
。 SQL是强类型的,但会进行类型转换。您应该尝试使用相同的类型进行比较,而不是将数字存储为字符串。
如果问题是平均值,那么您可以使用case
。类似的东西:
SELECT AVG(CASE WHEN ISNUMERIC(jl.[Stock Weight]) = 1
THEN CAST(jl.[Stock Weight] as FLOAT)
END)
对于比较逻辑,这建议使用与常量列相同的类型:
j1.[Vendor No_] = '8516'
[Item No_]
有点麻烦。写作很有诱惑力:
jl.[Item No_] BETWEEN '17000' AND '17099'
然而,这将匹配'170019991234545',因为比较将以字符串而不是数字来完成。另一种方法是:
(jl.[Item No_] BETWEEN '17000' AND '17099' AND LEN(jl.[Item No_]) = 5)
然而,这将匹配'1702A'。还有一个可以使用LIKE
来确保值都是数字:
(jl.[Item No_] BETWEEN '17000' AND '17099' AND
jl.[Item No_] LIKE '[0-9][0-9][0-9][0-9][0-9]'
)
这可以简化为:
(jl.[Item No_] LIKE '170[0-9][0-9]')
答案 1 :(得分:0)
试试这个:
<style
name="BaseTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="homeAsUpIndicator">@drawable/menu</item>
<item name="android:textColorPrimary">@android:color/white</item>
</style>
答案 2 :(得分:0)
列jl。[Item No_]包含字符串。检查所有行并从该列中删除字符串,然后使用上面的查询。
答案 3 :(得分:0)
您应该使用案例表达式(对于某些特殊字符串可能会出错,例如&#39;。&#39;,您可以添加一些额外的检查):
case
when isnumeric(jl.[Item No_]) = 1
then CAST( jl.[Item No_] AS INT )
else 0
end BETWEEN 17000 AND 17099