Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL代码=-420在函数“0”的字符串参数中找到无效字符;“去浮”;_Sql_Db2 - Fatal编程技术网

SQL代码=-420在函数“0”的字符串参数中找到无效字符;“去浮”;

SQL代码=-420在函数“0”的字符串参数中找到无效字符;“去浮”;,sql,db2,Sql,Db2,我在使用此代码时遇到问题 (SELECT r.SITE_ID, count(distinct r.NIIN) FROM (SELECT t.SITE_ID, t.NIIN, B.DT_INVT, B.DT_CRTD,CAST( case when B.DT_INVT = '0000000' then B.DT_CRTD + 2000 when B.DT_INVT IS NULL then B.DT_CRTD + 2000 when B.DT_INVT = ' ' then B.DT_

我在使用此代码时遇到问题

(SELECT r.SITE_ID, count(distinct r.NIIN)
FROM
(SELECT t.SITE_ID, t.NIIN, B.DT_INVT, B.DT_CRTD,CAST(
case when
B.DT_INVT = '0000000' then B.DT_CRTD + 2000
when B.DT_INVT IS NULL then B.DT_CRTD + 2000
when B.DT_INVT = '       ' then B.DT_CRTD + 2000
ELSE B.DT_INVT + 2000
End as INT) As DueDate
FROM
(SELECT A.SITE_ID, A.NIIN
FROM DDCNENVR.QBO A
WHERE NOT (A.RIC IN ('SMS', 'S9W', 'S9D'))
and A.SITE_ID in ('HECL', 'HECN')
GROUP BY A.SITE_ID, A.NIIN) as t
inner join DDCNENVR.QBS B on t.NIIN = B.NIIN and t.SITE_ID = B.SITE_ID) as r
where r.DueDate between 2018206 and 2019273
GROUP BY r.SITE_ID)
相同的代码适用于某些dbs,但在其他dbs中失败

在不使用duedate-between语句导出数据后,excel中的列类型如下所示:

创建的B.Dt_inv和B.Dt_是文本


在DB2V11.1.0.0及更高版本中,Duedate导出为number

,您可以使用这样的函数检查值是否可以转换为十进制

CREATE OR REPLACE FUNCTION IS_DECIMAL(s VARCHAR(255))
RETURNS SMALLINT
LANGUAGE SQL
CONTAINS SQL
DETERMINISTIC
NO EXTERNAL ACTION
RETURN 
    REGEXP_LIKE(s, '^\s*[+-]?\s*((\d+\.?\d*)|(\d*\.?\d+))\s*$')
像这样使用它

SELECT DT_INVT FROM DDCNENVR.QBS WHERE IS_DECIMAL(DT_INVT) = 0
它不是完美的,因为它不允许所有格式(例如,
1e3
可转换为十进制,但此函数会说它不是),但它会将例如
12 34
捕获为不可转换为十进制,而
TRANSLATE
函数则不会


它也不会检查字符串的长度,以确保其不超过31位小数。

检查可能出现的问题是什么?也许您有一条错误消息?@GordonLinoff如果我在“2018206”和“2019273”之间运行该语句而不包含r.DueDate,则代码在我使用的每个环境/db中都会平稳运行。但是,当添加前面的代码时,它在某些站点上运行平稳,在其他站点上给我一个去浮点错误。Db2中的字符串连接运算符是
|
,而不是
+
@mustaccio请参阅更新的代码。这些字段是我使用cast函数转换为INT的文本值。我仍然收到相同的错误。我尝试了IS_DECIMAL语句,它给了我一个令牌错误。很抱歉,我只在Db2仓库上测试了它。现在就用SMALLINTI返回类型试试吧。我试图创建这个函数,但我不太确定在哪里添加它。如果有帮助的话,我正在运行IBMQMF。如果您使用的是DB2forz/OS,那么我怀疑它没有类似于的
REGEXP\u。使用其他人建议的TRANSLATE函数我决定将我的查询从内部联接更改为左联接。解决了。谢谢大家的帮助。