postgresql-9.2 – “输入类型为数字的输入语法无效”用于输入“
发布时间:2020-12-13 16:00:00 所属栏目:百科 来源:网络整理
导读:我有一个使用NUMERIC类型的三列表.但是,其中两个没有任何东西(即空).这是代码: CREATE TABLE profiles(ID SMALLINT,FID SMALLINT,SURVEY VARCHAR(100),PROFILE VARCHAR(100),TYPE VARCHAR(100),SOURCE VARCHAR(100),NR_TRACES NUMERIC,TRACE_SPACE_M NUMERI
我有一个使用NUMERIC类型的三列表.但是,其中两个没有任何东西(即空).这是代码:
CREATE TABLE profiles( ID SMALLINT,FID SMALLINT,SURVEY VARCHAR(100),PROFILE VARCHAR(100),TYPE VARCHAR(100),SOURCE VARCHAR(100),NR_TRACES NUMERIC,TRACE_SPACE_M NUMERIC,LENGTH_M NUMERIC,IMAGES TEXT,COMMENTS TEXT ); ALTER TABLE profiles ADD ts tsvector; UPDATE profiles SET ts = to_tsvector('english',ID || ' ' || FID || ' ' || coalesce(SURVEY,'') || ' ' || coalesce(PROFILE,'') || ' ' || coalesce(TYPE,'') || ' ' || coalesce(SOURCE,'') || ' ' || coalesce(NR_TRACES,'') || ' ' || coalesce(TRACE_SPACE_M,'') || ' ' || coalesce(LENGTH_M,'') || ' ' || coalesce(IMAGES,'') || ' ' || coalesce(COMMENTS,'')); 鉴于我正在使用这两列没有任何内容(NR_TRACES和TRACE_SPACE_M)来更新我的ts列,因此不会填充ts列.我发现它是空的,因为我后来更新了两列: UPDATE profiles SET nr_traces = 10131,trace_space_m = 12.5 WHERE PROFILE = '30'; 得到了: ERROR: invalid input syntax for type numeric: "" 和 ERROR: tsvector column "TS" does not exist 但是,列LENGTH_M是完全填充的,所以我可以说“数字”类型不允许以我使用它的方式合并.我也用下面的那个没有成功: coalesce(my-numeric-empty-column,'') coalesce(my-numeric-empty-column,'')::numeric 如果我单独测试填充的LENGTH_M列,我会得到相同的指向”(空)空间: psql:profiles.sql:146: ERROR: invalid input syntax for type numeric: "" LINE 1: ... ' ' || TRACE_SPACE_M || ' ' || coalesce(LENGTH_M,'') || ' '... ^ 如果没有填充这两个空列的第一个位置,我怎么能绕过这个呢? 我很感激任何暗示,提前谢谢. 解决方法
COALESCE的工作原理是它假定第一个参数的数据类型,然后尝试将后续值转换为第一个数据类型.因此,以下显示相同的错误,因为”不能转换为数字:
SELECT COALESCE(NULL::numeric,'') 通过将第一个参数转换为text来解决此问题: SELECT COALESCE(NULL::numeric::text,'') 因此,您的代码可以使用coalesce(length_m :: text,”)来修复. 类似的方法是收集文本数组中的项,然后使用”收集join the array to a string,并为null元素收集”. UPDATE profiles SET ts = to_tsvector( 'english',array_to_string( ARRAY[id::text,fid::text,survey,profile,type,source,nr_traces::text,trace_space_m::text,length_m::text,images,comments],' ','') ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |