MySQL select 内で操作される文字列を実行しようとしていますが、UPPER 関数から奇妙な動作が発生しているようです。
単語の最初の文字 (スペースで区切られている) を返して大文字に変換しようとしています。ただし、返された単一の文字で UPPER を使用すると空白になりますが、最初の文字を取得する前に単語全体で UPPER を使用すると、最初の文字が取得されます。
SQL を最小限にまで削ぎ落として、このテスト SQL を思いつきました:-
SELECT
'verbatim h',
SUBSTRING(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(' ','verbatim h',' '), ' ', 2), ' ', -1), 1, 1),
UPPER(SUBSTRING(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(' ','verbatim h',' '), ' ', 2), ' ', -1), 1, 1)),
SUBSTRING(UPPER(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(' ','verbatim h',' '), ' ', 2), ' ', -1)), 1, 1)
これは、文字列 'verbatim h' を取得し、両端でスペースを連結してから、1 番目と 2 番目のスペースの間の文字列を取得します (したがって、verbatimになります)。
最初の列は文字列全体、2 列目は最初の単語の最初の文字、3 列目は最初の単語を大文字に変換した最初の文字、4 列目は大文字に変換した最初の単語の最初の文字です。場合。
列 3 と 4 は同じ値にする必要があると思います (唯一の違いは、最初の文字を取得する前に最初の単語を大文字に変換し、もう一方は最初の文字を取得してから大文字に変換することです)、代わりに 1 つが含まれていますもう一方には空白が含まれていますが、私が期待する文字Vです。
上記を変更して結果の文字の HEX 値を取得すると、空白の文字列は 16 進値 00 の 1 文字列になり、V は 16 進値 56 になります。
助言がありますか?明らかな何かが欠けていますか?