Доступ к SQL, выберите все, кроме последнего символа X поля - PullRequest
0 голосов
/ 15 июня 2009

Я ищу SQL-функцию доступа MS, похожую на SUBSTRING, но не совсем такую, как длина данных варьируется.

У меня есть несколько значений в поле, которое мы будем называть field1

Длина значения варьируется от 2 до 5.

Во всех случаях я хотел бы выбрать значения, кроме самого последнего символа. Так, например:

computer
browser
mouse
game
zip

становится:

compute
browse
mous
gam
zi

Есть ли такая функция?

Спасибо.

Ответы [ 3 ]

11 голосов
/ 15 июня 2009

Я бы просто:

select left(field1, len(field1) -1) from [table]
0 голосов
/ 16 июня 2009

Для 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;
0 голосов
/ 16 июня 2009

Для фактического аналога SubString, посмотрите на функцию Mid (). У меня есть своеобразное представление о том, что должна делать SubStr () (из моих дней Paradox), поэтому я давно написала свою собственную функцию SubStr () (она разбивает входную строку на две переменные на основе символа разделителя).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...