Мне нужно преобразовать поле данных int в nvarchar с ведущими нулями
пример:
1 преобразовать в '001'
867 преобразовать в 000867 и т. Д.
Спасибо.
Это мой ответ через 4 часа ...
Я протестировал этот сценарий T-SQL и у меня все отлично работает!
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED
SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED
Я создал эту пользовательскую функцию
Код T-SQL:
CREATE FUNCTION CIntToChar(@intVal BIGINT, @intLen Int) RETURNS nvarchar(20)
AS
BEGIN
-- BIGINT = 2^63-1 (9,223,372,036,854,775,807) Max size number
-- @intlen contains the string size to return
IF @intlen > 20
SET @intlen = 20
RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(20),@intVal))))
+ CONVERT(nvarchar(20),@intVal)
END
Пример :
ВЫБЕРИТЕ dbo.CIntToChar (867, 6) как COD_ID
ВЫВОД
000867
sql-server
stored-procedures
RicardoBalda
источник
источник
Ответы:
Попробуй это:
select right('00000' + cast(Your_Field as varchar(5)), 5)
Результат будет состоять из 5 цифр, например: 00001, ...., 01234.
источник
select right('00000' || cast(Your_Field as varchar(5)), 5)
Вы также можете использовать функцию FORMAT (), представленную в SQL Server 2012 . http://technet.microsoft.com/library/hh213505.aspx
источник
Используйте,
REPLICATE
чтобы вам не приходилось жестко кодировать все ведущие нули:ВЫВОД:
источник
Не для High-Jack, но следует отметить, что вам нужно использовать (N) VARCHAR вместо типа данных (N) CHAR.
Вышеуказанный сегмент не даст правильного ответа от SQL 2005
Вышеупомянутый сегмент даст желаемый ответ от SQL 2005
Varchar предоставит вам нужную длину префикса на лету. Где, поскольку тип данных фиксированной длины потребует обозначения и корректировки длины.
источник
Я люблю использовать
это дает мне
источник
RIGHT(1000+Number, 3)
- красиво, коротко и быстроТип данных «int» не может содержать более 10 цифр, кроме того, функция «Len ()» работает с целыми числами, поэтому нет необходимости преобразовывать int в строку перед вызовом функции len ().
Наконец, вы не учитываете случай, когда размер вашего int> общего количества цифр, которые вы хотите дополнить (@intLen).
Поэтому более краткое / правильное решение:
источник
Не очень элегантно, но я добавляю заданное значение с тем же количеством начальных нулей, которое мне нужно, к числовому, которое хочу преобразовать, и использую функцию ВПРАВО.
Пример:
источник
Однострочное решение ( само по себе ) для SQL Server 2008 или выше:
Умножение на
SIGN
выражение эквивалентноMAX(0, @DesiredLenght-LEN([Column]))
. Проблема в том, чтоMAX()
принимает только один аргумент ...источник
Я нашел хорошую статью здесь :
источник
Кстати, если это столбец int, он все равно не сохранит нули.Просто сделайте это на уровне представления или, если вам действительно нужно, в SELECT
источник
Была такая же проблема, вот как я решил ... Просто и элегантно. «4» - это то, какой длины должна быть строка, независимо от того, какое целое число передано, оно будет дополняться нулями до «4».
источник
В моем случае я хотел, чтобы мое поле имело ведущие 0 в 10-символьном поле (NVARCHAR (10)). Исходный файл не имеет начальных 0, необходимых для присоединения к другой таблице. Произошло это просто из-за того, что он был на SQL Server 2008R2:
Установите поле = right (('0000000000' + [Поле]), 10) (Невозможно использовать Format (), так как это до SQL2012)
Выполнено по существующим данным. Таким образом, 1 или 987654321 по-прежнему заполнят все 10 пробелов начальными нулями.
Поскольку новые данные импортируются, а затем выгружаются в таблицу через базу данных Access, я могу использовать формат ([Поле], «0000000000») при добавлении из Access в таблицу сервера SQL для любых новых записей.
источник
- Без «RTRIM» возвращается значение
3__
!!!- Без «RTRIM» возвращается значение
867___
!!!источник
Использование
RIGHT
- хороший вариант, но вы также можете сделать следующее:где
N
- общее количество цифр, которое вы хотите отобразить. Итак, для трехзначного значения с ведущими нулями (N = 3
):или поочередно
При этом желаемое значение прибавляется к степени 10, достаточной для генерации достаточного количества начальных нулей, а затем отсекается начальная 1.
Преимущество этого метода состоит в том, что результат всегда будет одинаковой длины, что позволяет использовать
SUBSTRING
вместо вместоRIGHT
, что недоступно в некоторых языках запросов (например, HQL).источник
Эта работа для меня в MYSQL:
Например:
Надеюсь, это поможет. С уважением
источник
Работает в SQLServer
наслаждаться
источник
Мне было интересно, будет ли это вам полезно?
источник