You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite中CASE WHEN THEN返回0值问题(.NET应用场景)

问题诊断与解决方案

我一眼就看出问题所在了——你在SQLite里用了+来做字符串拼接,但SQLite的+是算术加法运算符,不是字符串拼接符!这就是为什么你得到的全是0,而不是预期的字符串组合。

为什么会返回0?

SQLite在遇到+时会尝试把两边的操作数当作数字来计算。你的CASE语句返回的都是字符串(比如'_'、'R_'、'F41A'这类),当SQLite试图把这些字符串转成数字时会失败,失败后就会用0来代替每个部分。所有0加起来自然还是0,这就是你看到全0结果的原因。

修正后的查询语句

SQLite中正确的字符串拼接运算符是||,把你查询里所有的+替换成||就可以得到预期结果了:

select 
  (CASE IFNULL(CCODE_1, '') when 'STD' then '_' else '' end) 
  || (CASE IFNULL(CFRRR_CS, '') when '1' then 'F_' when '2' then 'R_' when '3' then 'FR_' else '' end) 
  || IFNULL(CCODE_1, '') 
  || (CASE when (IFNULL(CCODE_2, '') = '') then '' else '_' end) 
  || IFNULL(CCODE_2, '') 
  || (CASE when (IFNULL(CCODE_3, '') = '') then '' else '_' end) 
  || IFNULL(CCODE_3, '') as OptionID 
from X20_TIRES

补充说明

很多其他关系型数据库(比如SQL Server、MySQL在特定模式下)确实支持用+拼接字符串,但SQLite坚持使用标准SQL的||作为字符串连接符,这是很容易踩的一个跨数据库语法坑。你原来的CASE逻辑本身是没问题的,只是拼接方式用错了运算符而已。

内容的提问来源于stack exchange,提问作者HerrimanCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:46:30