Для ACE / Jet я бы использовал выражение MID()
. Хотя выражение LEFT()
будет работать нормально, MID()
является предпочтительным IMO, поскольку оно делает код более переносимым, т. Е. Было бы намного проще преобразовать собственное выражение MID()
ACE / Jet в стандартный SQL SUBSTRING
.
Обратите внимание, что вам нужно проверить длину текста, чтобы избежать неприятной ошибки, например при тестировании принятого в настоящее время ответа (King Avitus с использованием выражения LEFT()
) «как есть» через OLE DB для строки нулевой длины я получаю сообщение об ошибке «Поставщик данных или другой сервис вернул статус E_FAIL», который не является « очень полезно: (
Я предлагаю использовать выражение IIF()
ACE / Jet (которое, опять же, легко преобразуется в выражение CASE
стандартного SQL), чтобы проверить строку нулевой длины:
SELECT column_1,
MID(column_1, 1, IIF(LEN(column_1) = 0, 0, LEN(column_1) - 1))
AS column_1_truncated
FROM (
SELECT DISTINCT 'ab' AS column_1 FROM Calendar
UNION ALL
SELECT DISTINCT 'a' FROM Calendar
UNION ALL
SELECT DISTINCT '' FROM Calendar
UNION ALL
SELECT DISTINCT NULL FROM Calendar
) AS MyTable;