Я пытаюсь выполнить некоторые операции со строками в рамках выбора MySQL, и у меня, похоже, какое-то странное поведение из функции 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)
Это берет строку «дословно h», объединяет пробелы с обоих концов, а затем получает строку между 1-м и 2-м пробелом (так что она будет дословно).
Первый столбец — это полная строка, 2-й столбец — это первая буква первого слова, 3-й столбец — это первая буква, преобразованная в верхний регистр первого слова, а 4-й столбец — это первая буква первого слова, преобразованная в верхний регистр. кейс.
Я думаю, что столбцы 3 и 4 должны иметь одинаковые значения (единственное отличие состоит в том, что один преобразует 1-е слово в верхний регистр перед захватом первой буквы, а другой захватывает 1-ю букву, а затем преобразует ее в верхний регистр), но вместо этого один содержит буква V, как я и ожидал, а другая содержит пробел.
Если я изменю приведенное выше, чтобы получить шестнадцатеричные значения результирующих символов, пустым будет строка из 1 символа с шестнадцатеричным значением 00, а V — шестнадцатеричное значение 56.
Какие-либо предложения? Я упускаю что-то очевидное?