字符串“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”太长,将被截断的主要内容,如果未能解决你的问题,请参考以下文章

8.2 字符串对象

第15章:字符串

什么是字符串常量和字符串变量啊???

neo4j字符串操作大全

java中怎么判断一个字符串数组中包含某个字符或字符串

PHP字符串函数