Decimal(18)字段转Text字段并去除.00后缀的SQL语法问题
Decimal转Text并去除.00后缀的正确SQL实现
针对Decimal字段转Text并去掉.00后缀的需求,以下是不同数据库环境下的可行方案,同时说明原语句报错的可能原因:
原语句报错原因
不同数据库对TRUNCATE函数的定义不同:
- 若使用SQL Server,
TRUNCATE是用于截断表数据的DDL语句,并非数值截断函数,这会直接导致语法校验失败; - 部分数据库对别名的引号使用有要求(比如单引号仅用于字符串字面量,别名应使用双引号或无引号)。
分数据库解决方案
SQL Server
由于字段值均为X.00格式,可直接将Decimal转为整数后再转字符串:
SELECT CONVERT(VARCHAR(15), CAST(a.CADS_ID_Number__c AS INT)) AS CADS_ID_Number__c
或使用STR函数(注意去除默认前导空格):
SELECT LTRIM(STR(a.CADS_ID_Number__c, 15, 0)) AS CADS_ID_Number__c
MySQL
利用TRUNCATE(MySQL中该函数用于数值截断)或直接转整数类型:
-- 截断小数后转字符串 SELECT CAST(TRUNCATE(a.CADS_ID_Number__c, 0) AS CHAR) AS CADS_ID_Number__c -- 更简洁的方式:直接转无符号整数 SELECT CAST(a.CADS_ID_Number__c AS UNSIGNED) AS CADS_ID_Number__c
Oracle
使用TO_CHAR指定格式或结合TRUNC函数:
-- 直接格式化去除小数部分 SELECT TO_CHAR(a.CADS_ID_Number__c, 'FM999999999999999') AS CADS_ID_Number__c -- 或截断后转字符串 SELECT TO_CHAR(TRUNC(a.CADS_ID_Number__c), 'FM999999999999999') AS CADS_ID_Number__c
注:FM修饰符用于去除格式化后的多余空格。
内容的提问来源于stack exchange,提问作者pma85
相关产品推荐
相关产品推荐

