やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3コア関数 quote

 引数で渡されたテキストをシングルクォートする。

成果物

構文

select quote(文字列);
'文字列'

select 'quote()';
select quote('quote()');
select quote('クォートする。');
quote()
'quote()'
'クォートする。'

 でも、文中に'があったとき、うまく動作しない。

問題

自前でクォートした上でquote()することができない(''quote()''にできない)

select quote(''quote()'');
select quote('''quote()''');
select quote('\'quote()\'');
select quote(char(0x27) || 'quote()' || char(0x27));
select quote(quote('quote()'));
Error: near line 5: near "quote": syntax error
'''quote()'''
Error: near line 7: near "quote": syntax error
'''quote()'''
'''quote()'''

 'エスケープしないと構文エラー。エスケープすると'''と3つ出てしまい2つにできない。

 まあ、こんな用途はたぶん無いだろう。だが、以下は困るのでは?

文中に'を使った上でquote()することができない('I'm Andy'にできない)

-- select quote('I'm Andy.');
select quote('I''m Andy.');
select quote('I' || char(0x27) || 'm Andy.');
'I''m Andy.'
'I''m Andy.'

 英文ならシングルクォーテーションを使うこともあるだろうに。それをクォートしたいときはどうするの?

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで