Как добавить нули перед текстовым полем в таблице доступа - PullRequest
2 голосов
/ 19 июля 2010

У меня есть таблица доступа с текстовым полем. Он имеет буквенно-цифровые значения. Но я хочу, чтобы все значения были минимум 3 цифры. поэтому я хочу добавить нули перед всеми однозначными или двузначными значениями

.

5  must become 005
89 must become 089

как мне написать запрос для обновления всех значений в таблице.

спасибо tksy

Ответы [ 6 ]

9 голосов
/ 19 июля 2010

Ключ состоит в том, чтобы добавить столько нулей, сколько необходимо, чтобы получить длину до 3.

UPDATE yourTable
SET YourField = LEFT("00", 3-LEN(YourField)) + YourField
WHERE LEN(YourField)<3 AND Len(YourField)>0
2 голосов
/ 19 июля 2010
update tbl
set Col1 = RIGHT("000" + Col1,3)
where len(Col1) < 3
1 голос
/ 05 января 2015

Создать -> Дизайн запроса -> Обновить запрос

Выберите переменную, которую вы хотите обновить, затем в поле для обновления введите:

Формат ([имя переменной], «0000000»)

Я использовал 7 нулей выше, потому что я хотел, чтобы заполнить нули в начале числовой строки до 7 мест.

Обратите внимание, что это можно использовать только для текстового поля.

1 голос
/ 20 июля 2010

Хотя обычно важно попытаться сделать как можно больше в одном операторе SQL (чтобы помочь оптимизатору для приложений OLTP и т. Д.), Похоже, что это сценарий повреждения данных, поэтому я предполагаю, что одноразовая очистка данных - это все это требуется. И если учесть, что есть только два случая («однозначные или двузначные значения»), нет никакого реального вреда в использовании двух операторов UPDATE, например.

UPDATE Test1
   SET text_col = '0' + text_col
 WHERE text_col ALIKE '[0-9][0-9]';

UPDATE Test1
   SET text_col = '00' + text_col
 WHERE text_col ALIKE '[0-9]';

ОДНАКО, наиболее важной частью упражнения является применение ограничений данных, чтобы гарантировать, что повреждение данных не повторяется, например. (Синтаксис режима SQL ANSI-92):

ALTER TABLE Test1 ADD
   CONSTRAINT text_col__numeric__at_least_three_digits
   CHECK (
          text_col NOT ALIKE '[0-9]'
          AND text_col NOT ALIKE '[0-9][0-9]'
         );
0 голосов
/ 19 октября 2017

ДОСТУП

SELECT FORMAT(startTable.numField,"00#") AS txtField
FROM startTable
WHERE startTable.numField IS NOT NULL;

...

UPDATE destinationTable
SET destinationTable.txtField = FORMAT(startTable.numField,"00#")
WHERE startTable.numField IS NOT NULL;

...

INSERT INTO destinationTable ( txtField )
SELECT FORMAT(startTable.numField,"00#") AS txtField
FROM startTable
WHERE startTable.numField IS NOT NULL;

SQL

SELECT RIGHT('000' + CAST(numField AS VARCHAR(3)), 3) AS txtField
FROM startTable
WHERE startTable.numField IS NOT NULL

...

UPDATE destinationTable
SET destinationTable.txtField = RIGHT('000' + CAST(startTable.numField AS VARCHAR(3)), 3)
WHERE startTable.numField IS NOT NULL

...

INSERT INTO destinationTable ( txtField )
SELECT RIGHT('000' + CAST(numField AS VARCHAR(3)), 3) AS txtField
FROM startTable
WHERE startTable.numField IS NOT NULL
0 голосов
/ 19 июля 2010

Как правило, вы можете поставить перед тулем 3 нуля, а затем вывести последние 3 цифры справа Что-то вроде right("000" + val, 3), если бы это были настоящие функции.

Я думаю, в Access это MID("000" & val, 3, 3)

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