我有下面的sql代码和case语句总是返回'错误将数据类型varchar转换为数字'的情况。但是,如果我将其注释掉,那么即使在第一列中使用了相同的代码,语句也会成功运行。
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:support-v4:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'
compile ('com.google.firebase:firebase-core:11.4.2')
compile ('com.google.firebase:firebase-messaging:11.4.2')
compile ('com.google.firebase:firebase-crash:11.4.2')
compile ('com.google.firebase:firebase-invites:11.4.2')
compile 'com.google.android.gms:play-services-location:11.4.2'
compile 'com.google.android.gms:play-services-gcm:11.4.2'
compile 'com.google.android.gms:play-services-maps:11.4.2'
compile 'com.google.android.gms:play-services-auth:11.4.2'
compile 'com.google.android.gms:play-services-places:11.4.2'
如果我按上述方式运行,则会失败。如果我在片段时注释掉Case,那么它会成功运行。谢谢!
答案 0 :(得分:2)
您的CASE语句正在尝试返回两种不同的类型:DECIMAL(10,5)和varchar。
它需要返回一种类型,所以不要使用'0'而只使用0.0。
答案 1 :(得分:1)
您告诉它在同一列中显示两种不同的数据类型。尝试;
SELECT CAST(DATA1 AS DECIMAL(10,5)), AMOUNT,
CASE
WHEN NAME LIKE 'A' THEN CAST(DATA1 AS DECIMAL(10,5))
ELSE CAST(0.0 AS DECIMAL(10,5)) END FROM TEST