我正在将SQL服务器代码转换为Postgres,并试图检查字符串中任何位置的字符是否有效。
到目前为止的代码是(有部分围绕这个)
SELECT
string_agg(txml.substr_text,'') as stringagg
FROM (
SELECT
CASE
WHEN (substring('ÄZYasdXA', n, 1) similar to ('"[^a-zA-Z0-9_{}""""() *&%$#@!?/\;:,.—<>–+ =`|~]-"'))
AND (substring('ÄZYasdXA', n, 1) <> '[') AND (substring('ÄZYasdXA', n, 1) <> ']')
AND (substring('ÄZYasdXA', n, 1) <> '^')
THEN substring('ÄZYasdXA', n, 1)
ELSE '|'
END as substr_text
FROM (SELECT
* from generate_series(1,1000)) AS nums (n)
WHERE n <= LENGTH('ÄZYasdXA')) AS txml
字符串
我已经输入了一个in来检查,因为在SQL Server中做同样的事情会使其无效,但在这里没有这样做。我是否遗漏了什么,或者我是否需要尝试更改“[^a-zA-Z 0 -9_'{}"()*&%$#@!?/;:,.-<>-+ =`|~]-“一部分?
1条答案
按热度按时间qmb5sa221#
请调试您的工作并检查结果:
字符串
结果:
| 测试1|测试2|测试3| substring2| substring2 |
| --|--|--|--| ------------ |
| 假的|真的|真的|Ä| Ä |
test
失败,因此result将等于|
。您可能需要将第一个测试更改为:
型
(返回
true
)