Функция LEFT

Функция имеет следующий синтаксис:

LEFT(<строковое выражение>, <целочисленное выражение>)

и вырезает заданное вторым аргументом число символов слева из строки, являющейся первым аргументом. Итак, вот первые символы названий кораблей из таблицы Ships:

SELECT DISTINCT LEFT(name, 1)
FROM Ships
ORDER BY 1;
🚫
[[ error ]]
[[ column ]]
[[ value ]]

А вот как, например, можно получить таблицу кодов всех алфавитных символов:

SELECT CHAR(ASCII('a')+ num-1) letter, ASCII('a')+ num - 1 [code]
FROM (SELECT 5*5*(a-1)+5*(b-1) + c AS num
      FROM (SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3
            UNION ALL SELECT 4 UNION ALL SELECT 5
           ) x 
            CROSS JOIN
           (SELECT 1 b UNION ALL SELECT 2 UNION ALL SELECT 3
            UNION ALL SELECT 4 UNION ALL SELECT 5
           ) y 
            CROSS JOIN
           (SELECT 1 c UNION ALL SELECT 2 UNION ALL SELECT 3
            UNION ALL SELECT 4 UNION ALL SELECT 5
           ) z
     ) x
WHERE ASCII('a')+ num -1 BETWEEN ASCII('a') AND ASCII('z');
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Здесь используется алгоритм генерации числовой последовательности, изложенный в главе “Типичные проблемы”.

Как известно, коды строчных и прописных букв отличаются. Поэтому, чтобы получить полный набор без переписывания запроса, достаточно просто дописать к вышеприведенному коду аналогичный:

UNION
SELECT CHAR(ASCII('A')+ num-1) letter, ASCII('A')+ num - 1 [code]
FROM (SELECT 5*5*(a-1)+5*(b-1) + c AS num
      FROM (SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3
            UNION ALL SELECT 4 UNION ALL SELECT 5
           ) x 
      CROSS JOIN
          (SELECT 1 b UNION ALL SELECT 2 UNION ALL SELECT 3
           UNION ALL SELECT 4 UNION ALL SELECT 5
          ) y 
      CROSS JOIN
          (SELECT 1 c UNION ALL SELECT 2 UNION ALL SELECT 3
           UNION ALL SELECT 4 UNION ALL SELECT 5
          ) z
    ) x
WHERE ASCII('A')+ num -1 BETWEEN ASCII('A') AND ASCII('Z')

Чтобы таблица выглядела более патриотично, достаточно заменить латинские буквы a и A на неотличимые на вид русские — а и А, а z и Z на я и Я. Вот только буквы «ё» вы не увидите в этой таблице, так как в кодовой таблице ASCII эти символы лежат отдельно, что легко проверить:

SELECT ASCII('ё')
UNION ALL
SELECT ASCII('Ё');
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Полагаем, что для вас не составит сложности добавить эту букву в таблицу при необходимости.

Рассмотрим теперь задачу определения нахождения искомой подстроки в строковом выражении. Для этого могут использоваться две функции — CHARINDEX и PATINDEX. Обе они возвращают начальную позицию (позицию первого символа подстроки) подстроки в строке.