字符串“abcdfghrdfthgywdcgrt”太长,将被截断
Posted
技术标签:
【中文标题】字符串“abcdfghrdfthgywdcgrt”太长,将被截断【英文标题】:String 'abcdfghrdfthgywdcgrt' is too long and would be truncated 【发布时间】:2020-08-10 08:24:31 【问题描述】:查询:
创建表 SRC(SRC_STRING VARCHAR(20)) 创建或替换表 TGT(tgt_STRING VARCHAR(10))
插入 SRC 值('JKNHJYGHTFGRTYGHJ')
插入 TGT(TGT_STRING) 从 SRC 中选择 SRC_STRING::VARCHAR(10)
错误:字符串“JKNHJYGHTFGRTYGHJ”太长,将被截断
在将数据从高精度插入低精度列时,有什么方法可以启用强制长度(不适用于 COPY 命令)?
【问题讨论】:
将数据从高 varchar 长度列复制到低 varchar 长度列不是问题。你在找什么? 更新了描述,是关于sql INSERT语句而不是COPY命令。 【参考方案1】:我建议使用 SUBSTR( ) 函数来选择您想要的数据片段,示例如下,我取前 10 个字符(如果可用,如果只有 5 个,它将使用这 5 个字符) .
CREATE OR REPLACE TEMPORARY TABLE SRC(
src_string VARCHAR(20));
CREATE OR REPLACE TEMPORARY TABLE TGT(
tgt_STRING VARCHAR(10));
INSERT INTO src
VALUES('JKNHJYGHTFGRTYGHJ');
INSERT INTO tgt(tgt_string)
SELECT SUBSTR(src_string, 1, 10)
FROM SRC;
SELECT * FROM tgt; --JKNHJYGHTF
这里是函数的文档:
https://docs.snowflake.com/en/sql-reference/functions/substr.html
我希望这会有所帮助...丰富
附言如果这个(或另一个)答案对您有帮助,请花点时间“接受”有帮助的答案,方法是单击答案旁边的复选标记,将其从“灰色”切换为“已填写”。
【讨论】:
我知道 SUBSTR 函数,正在寻找类似于 ENFORCE_LENGTH (docs.snowflake.com/en/sql-reference/sql/…) 的选项,但我在 Snowflake 文档中找不到这样的选项。 听起来您正在寻找与 COPY 命令中的 ENFORCE_LENGTH 选项完全相同的功能,这不是本机可用的,但相当容易构建。可以使用上述原始答案复制“错误”选项。 “true”选项可以用类似下面的命令来复制,虽然它不会失败,它只是插入零记录。 INSERT INTO tgt(tgt_string) SELECT src_string FROM ( SELECT src_string, MAX(LENGTH(src_string)) OVER () as max_length FROM SRC ) WHERE max_length以上是关于字符串“abcdfghrdfthgywdcgrt”太长,将被截断的主要内容,如果未能解决你的问题,请参考以下文章