=Start=
缘由:
最近又花费了一些时间在处理Hive SQL中的单双引号问题上,感觉需要再专门记录一下,方便后面有需要的时候参考。
正文:
参考解答:
简单来说就是,
- 想显示包含单引号的内容时,用双引号包裹,暂时还没有找到如何在单引号括住的字符串里面直接把单引号给显示出来的办法;
- 想显示包含双引号的内容时,用单引号包裹,或者对内部的双引号做转义;
- 如果想减少麻烦,用双引号包裹,因为对双引号的转义方便且有效。
通义千问、豆包等LLM大模型问答上的回答都不靠谱,连编译器那一关检查都过不去(提示字符串未闭合),我自测添加转义字符的SQL又无法正常工作,当前只能是先这样了。
-- 测试SQL
with t1 as (
SELECT
'a b c' as sep_blank
,'a\'b\'c' as sep_single_quote --【a\c】?
,'a''b''c' as sep_single_quote2 --【abc】
,'\'' as single_quote --【\】为什么会显示这个?我想显示的是单引号【'】
,'\\\'' as single_quote2 --【\\】
,"name like 'a b c'" as value1 --ok
,"name like \"a b c\"" as value2
)
SELECT
*
,regexp_extract(value1,'(name|email)\\s{0,}like\\s{0,}(\\S{2,})',2) as name_like --【'a】
,regexp_extract(value1,"(name|email)\\s{0,}like\\s{0,}'([^']{2,})'",2) as name_like2 --【a b c】满足目标要求
,regexp_extract(value2,'(name|email)\\s{0,}like\\s{0,}(\\S{2,})',2) as name2_like --【"a】
,regexp_extract(value1,"(name|email)\\s{0,}like\\s{0,}['|\"]([^\"']{2,})['|\"]",2) as name1_like2 --ok
,regexp_extract(value2,"(name|email)\\s{0,}like\\s{0,}['|\"]([^\"']{2,})['|\"]",2) as name2_like2 --ok
FROM
t1
;
-- 以下是输出的结果
a b c
a\c
abc
\
\\
name like 'a b c'
name like "a b c"
'a
a b c
"a
a b c
a b c
参考链接:
暂无
=END=
《“Hive SQL中的单引号和双引号”》 有 1 条评论
How to escape single quotes in RLIKE Hive? Double single quotes not working #暂未测试,不过方法一是肯定没问题的
https://stackoverflow.com/questions/66298709/how-to-escape-single-quotes-in-rlike-hive-double-single-quotes-not-working
`
Three methods:
1. Put the whole regexp into double-quotes, single quote is shielded inside double-quotes:
where column rlike “o’brien”
2. Use unicode \u0027
where column rlike ‘o\\u0027brien’
3. Use HEX \x27
where column rlike ‘o\\x27brien’
Using \\x or \\u codes you can check any special character if you know it’s code.
`