Sql число в строку: MS SQL Server и T-SQL
Содержание
sql — Как преобразовать дробную строку в число?
Вопрос задан
Изменён
1 год 7 месяцев назад
Просмотрен
231 раз
Имеется отрицательная дробная строка, которую я хочу перевести в number
при помощи функции TO_NUMBER
:
SELECT TO_NUMBER('-45516,51') FROM DUAL;
Однако, при выполнений выдается ошибка:
ORA-01722: invalid number
Каким образом можно конвертировать отрицательные дробные строки в числа?
- sql
- база-данных
- строки
- oracle
0
Это потому, что в национальных установках сессии стоит десятичный разделитель — точка:
show parameter nls_numeric_characters NAME TYPE VALUE ---------------------- ------ ----- nls_numeric_characters string ., select to_number ('-45516,51') num from dual;
ORA-01722: invalid number
В примере из документации показано как явно указать десятичный разделитель и разделитель троек цифр (тысячные разряды):
select to_number ('45516,51', 'FM99999D99' ,'nls_numeric_characters='',.''') num from dual; NUM ---------- -45516.51
Как я выяснил позже, невозможна конвертация если в строке вместо «.» используется «,».
Если в документе имеется такая строка, то нужно вначале поменять запятые на точки:
SELECT TO_NUMBER(REPLACE('-45516,51', ',', '.')) FROM test_table;
1
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
PostgreSQL : Документация: 10: 9.8. Функции форматирования данных : Компания Postgres Professional
RU
EN
RU EN
Функции форматирования в PostgreSQL предоставляют богатый набор инструментов для преобразования самых разных типов данных (дата/время, целое, числа с плавающей и фиксированной точкой) в форматированные строки и обратно. Все они перечислены в Таблице 9.23. Все эти функции следует одному соглашению: в первом аргументе передаётся значение, которое нужно отформатировать, а во втором — шаблон, определяющий формат ввода или вывода.
Таблица 9.23. Функции форматирования
Функция | Тип результата | Описание | Пример |
---|---|---|---|
| text | преобразует время в текст | to_char(current_timestamp, 'Hh22:MI:SS') |
| text | преобразует интервал в текст | to_char(interval '15h 2m 12s', 'Hh34:MI:SS') |
| text | преобразует целое в текст | to_char(125, '999') |
| text | преобразует плавающее одинарной/двойной точности в текст | to_char(125. |
| text | преобразует числовое значение в текст | to_char(-125.8, '999D99S') |
| date | преобразует текст в дату | to_date('05 Dec 2000', 'DD Mon YYYY') |
| numeric | преобразует текст в число | to_number('12,454.8-', '99G999D9S') |
| timestamp with time zone | преобразует строку во время | to_timestamp('05 Dec 2000', 'DD Mon YYYY') |
Примечание
Также имеется функция to_timestamp
с одним аргументом; см. Таблицу 9.30.
Подсказка
Функции to_timestamp
и to_date
предназначены для работы с входными форматами, которые нельзя преобразовать простым приведением. Для большинства стандартных форматов даты/времени работает простое приведение исходной строки к требуемому типу и использовать его гораздо легче. Так же и функцию to_number
нет необходимости использовать для стандартных представлений чисел.
Шаблон вывода to_char
может содержать ряд кодов, которые распознаются при форматировании и заменяются соответствующими данными. Любой текст, который не является кодом, копируется в результат в неизменном виде. Подобным образом, в строке шаблона ввода (для других функций) коды шаблона определяют, какие значения содержит передаваемая текстовая строка.
Все коды форматирования даты и времени перечислены в Таблице 9.24.
Таблица 9.24. Коды форматирования даты/времени
Код | Описание |
---|---|
HH | час (01-12) |
Hh22 | час (01-12) |
Hh34 | час (00-23) |
MI | минута (00-59) |
SS | секунда (00-59) |
MS | миллисекунда (000-999) |
US | микросекунда (000000-999999) |
SSSS | число секунд с начала суток (0-86399) |
AM , am , PM или pm | обозначение времени до/после полудня (без точек) |
A. , a.m. , P.M. или p.m. | обозначение времени до/после полудня (с точками) |
Y,YYY | год (4 или более цифр) с разделителем |
YYYY | год (4 или более цифр) |
YYY | последние 3 цифры года |
YY | последние 2 цифры года |
Y | последняя цифра года |
IYYY | недельный год по ISO 8601 (4 или более цифр) |
IYY | последние 3 цифры недельного года по ISO 8601 |
IY | последние 2 цифры недельного года по ISO 8601 |
I | последняя цифра недельного года по ISO 8601 |
BC , bc , AD или ad | обозначение эры (без точек) |
B.C. , b.c. , A.D. или a. | обозначение эры (с точками) |
MONTH | полное название месяца в верхнем регистре (дополненное пробелами до 9 символов) |
Month | полное название месяца с большой буквы (дополненное пробелами до 9 символов) |
month | полное название месяца в нижнем регистре (дополненное пробелами до 9 символов) |
MON | сокращённое название месяца в верхнем регистре (3 буквы в английском; в других языках длина может меняться) |
Mon | сокращённое название месяца с большой буквы (3 буквы в английском; в других языках длина может меняться) |
mon | сокращённое название месяца в нижнем регистре (3 буквы в английском; в других языках длина может меняться) |
MM | номер месяца (01-12) |
DAY | полное название дня недели в верхнем регистре (дополненное пробелами до 9 символов) |
Day | полное название дня недели с большой буквы (дополненное пробелами до 9 символов) |
day | полное название дня недели в нижнем регистре (дополненное пробелами до 9 символов) |
DY | сокращённое название дня недели в верхнем регистре (3 буквы в английском; в других языках может меняться) |
Dy | сокращённое название дня недели с большой буквы (3 буквы в английском; в других языках длина может меняться) |
dy | сокращённое название дня недели в нижнем регистре (3 буквы в английском; в других языках длина может меняться) |
DDD | номер дня в году (001-366) |
IDDD | номер дня в году по ISO 8601 (001-371; 1 день — понедельник первой недели по ISO) |
DD | день месяца (01-31) |
D | номер дня недели, считая с воскресенья (1 ) до субботы (7 ) |
ID | номер дня недели по ISO 8601, считая с понедельника (1 ) до воскресенья (7 ) |
W | неделя месяца (1-5) (первая неделя начинается в первое число месяца) |
WW | номер недели в году (1-53) (первая неделя начинается в первый день года) |
IW | номер недели в году по ISO 8601 (01-53; первый четверг года относится к неделе 1) |
CC | век (2 цифры) (двадцать первый век начался 2001-01-01) |
J | юлианская дата (целое число дней от 24 ноября 4714 г.![]() |
Q | квартал |
RM | номер месяца римскими цифрами в верхнем регистре (I-XII; I=январь) |
rm | номер месяца римскими цифрами в нижнем регистре (i-xii; i=январь) |
TZ | сокращённое название часового пояса в верхнем регистре (поддерживается только в to_char ) |
tz | сокращённое название часового пояса в нижнем регистре (поддерживается только в to_char ) |
OF | смещение часового пояса от UTC (поддерживается только в to_char ) |
К любым кодам форматирования можно добавить модификаторы, изменяющие их поведение. Например, шаблон форматирования FMMonth
включает код Month
с модификатором FM
. Модификаторы, предназначенные для форматирования даты/времени, перечислены в Таблице 9. 25.
Таблица 9.25. Модификаторы кодов для форматирования даты/времени
Модификатор | Описание | Пример |
---|---|---|
Приставка FM | режим заполнения (подавляет ведущие нули и дополнение пробелами) | FMMonth |
Окончание TH | окончание порядкового числительного в верхнем регистре | DDTH , например 12TH |
Окончание th | окончание порядкового числительного в нижнем регистре | DDth , например 12th |
Приставка FX | глобальный параметр фиксированного формата (см. замечания) | FX Month DD Day |
Приставка TM | режим перевода (выводятся локализованные названия дней и месяцев, исходя из lc_time) | TMMonth |
Окончание SP | режим числа прописью (не реализован) | DDSP |
Замечания по использованию форматов даты/времени:
FM
подавляет дополняющие пробелы и нули справа, которые в противном случае будут добавлены, чтобы результат имел фиксированную ширину.В PostgreSQL модификатор
FM
действует только на следующий код, тогда как в OracleFM
её действие распространяется на все последующие коды, пока не будет отключено последующим модификаторомFM
.TM
не затрагивает замыкающие пробелы. Функцииto_timestamp
иto_date
игнорируют указаниеTM
.to_timestamp
иto_date
пропускают повторяющиеся пробелы во входной строке, если только не используется параметрFX
. Например,to_timestamp('2000 JUN', 'YYYY MON')
будет работать, ноto_timestamp('2000 JUN', 'FXYYYY MON')
вернёт ошибку, так какto_timestamp
в данном случае ожидает только один разделяющий пробел. ПриставкаFX
должна быть первой в шаблоне.Шаблоны для функций
to_char
могут содержать обычный текст; он будет выведен в неизменном виде. Чтобы вывести текст принудительно, например, если в нём оказываются поддерживаемые коды, его можно заключить в кавычки.Например, в строке
'"Hello Year "YYYY'
, кодYYYY
будет заменён номером года, а букваY
в словеYear
останется неизменной. В функцияхto_date
,to_number
иto_timestamp
при обработке подстроки в кавычках просто пропускаются символы входной строки по числу символов в подстроке, например для"XX"
будут пропущены два символа.Если вы хотите получить в результате кавычки, перед ними нужно добавить обратную косую черту, например так:
'\"YYYY Month\"'
.Если в функциях
to_timestamp
иto_date
формат года определяется менее, чем 4 цифрами, например, какYYY
, и в переданном значении года тоже меньше 4 цифр, год пересчитывается в максимально близкий к году 2020, т. е.95
воспринимается как 1995.Функции
to_timestamp
иto_date
воспринимают отрицательные значения годов как относящиеся к годам до н.э. Если же указать отрицательное значение и добавить явный признак
BC
(до н. э.), год будет относиться к н. э. Нулевое значение года воспринимается как 1 год до н. э.В функциях
to_timestamp
иto_date
с преобразованиемYYYY
связано ограничение, когда обрабатываемый год записывается более чем 4 цифрами. ПослеYYYY
необходимо будет добавить нецифровой символ или соответствующий код, иначе год всегда будет восприниматься как 4 цифры. Например, вto_date('200001131', 'YYYYMMDD')
(с годом 20000) год будет интерпретирован как состоящий из 4 цифр; чтобы исправить ситуацию, нужно добавить нецифровой разделитель после года, как вto_date('20000-1131', 'YYYY-MMDD')
, или код как вto_date('20000Nov31', 'YYYYMonDD')
.Функции
to_timestamp
иto_date
принимают полеCC
(век), но игнорируют его, если в шаблоне есть полеYYY
,YYYY
илиY,YYY
.Если
CC
используется сYY
илиY
, результатом будет год в данном столетии. Если присутствует только код столетия, без года, подразумевается первый год этого века.Функции
to_timestamp
иto_date
принимают названия и номера дней недели (DAY
,D
и связанные типы полей), но игнорируют их при вычислении результата. То же самое происходит с полями квартала (Q
).Функциям
to_timestamp
иto_date
можно передать даты по недельному календарю ISO 8601 (отличающиеся от григорианских) одним из двух способов:Год, номер недели и дня недели: например,
to_date('2006-42-4', 'IYYY-IW-ID')
возвращает дату2006-10-19
. Если день недели опускается, он считается равным 1 (понедельнику).Год и день года: например,
to_date('2006-291', 'IYYY-IDDD')
также возвращает2006-10-19
.
Попытка ввести дату из смеси полей григорианского и недельного календаря ISO 8601 бессмысленна, поэтому это будет считаться ошибкой.
В контексте ISO 8601 понятия «номер месяца» и «день месяца» не существуют, а в григорианском календаре нет понятия номера недели по ISO.
Внимание
Тогда как
to_date
не примет смесь полей григорианского и недельного календаря ISO,to_char
способна на это, так как форматы вродеYYYY-MM-DD (IYYY-IDDD)
могут быть полезны. Но избегайте форматов типаIYYY-MM-DD
; в противном случае с датами в начале года возможны сюрпризы. (За дополнительными сведениями обратитесь к Подразделу 9.9.1.)Функция
to_timestamp
воспринимает поля миллисекунд (MS
) или микросекунд (US
) как дробную часть число секунд. Например,to_timestamp('12.3', 'SS.MS')
— это не 3 миллисекунды, а 300, так как это значение воспринимается как 12 + 0.3 секунды. Это значит, что для форматаSS.MS
входные значения12.3
,12.30
и12.300
задают одно и то же число миллисекунд.Чтобы получить три миллисекунды, время нужно записать в виде
12.003
, тогда оно будет воспринято как 12 + 0.003 = 12.003 сек.Ещё более сложный пример:
to_timestamp('15:12:02.020.001230', 'Hh34:MI:SS.MS.US')
будет преобразовано в 15 часов, 12 минут и 2 секунды + 20 миллисекунд + 1230 микросекунд = 2.021230 seconds.Нумерация дней недели в
to_char(..., 'ID')
соответствует функцииextract(isodow from ...)
, но нумерацияto_char(..., 'D')
не соответствует нумерации, принятой вextract(dow from ...)
.Функция
to_char(interval)
обрабатывает форматыHH
иHh22
в рамках 12 часов, то есть 0 и 36 часов будут выводиться как12
, тогда какHh34
выводит число часов полностью, и для значенийinterval
результат может превышать 23.
Коды форматирования числовых значений перечислены в Таблице 9.26.
Таблица 9. 26. Коды форматирования чисел
Код | Описание |
---|---|
9 | позиция цифры (может отсутствовать, если цифра незначащая) |
0 | позиция цифры (присутствует всегда, даже если цифра незначащая) |
. (точка) | десятичная точка |
, (запятая) | разделитель групп (тысяч) |
PR | отрицательное значение в угловых скобках |
S | знак, добавляемый к числу (с учётом локали) |
L | символ денежной единицы (с учётом локали) |
D | разделитель целой и дробной части числа (с учётом локали) |
G | разделитель групп (с учётом локали) |
MI | знак минус в заданной позиции (если число < 0) |
PL | знак плюс в заданной позиции (если число > 0) |
SG | знак плюс или минус в заданной позиции |
RN | число римскими цифрами (в диапазоне от 1 до 3999) |
TH или th | окончание порядкового числительного |
V | сдвиг на заданное количество цифр (см.![]() |
EEEE | экспоненциальная запись числа |
Замечания по использованию форматов чисел:
0
обозначает позицию цифры, которая будет выводиться всегда, даже если это незначащий ноль слева или справа.9
также обозначает позицию цифры, но если это незначащий ноль слева, он заменяется пробелом, а если справа и задан режим заполнения, он удаляется. (Для функцииto_number()
эти два символа равнозначны.)Символы шаблона
S
,L
,D
иG
представляют знак, символ денежной единицы, десятичную точку и разделитель тысяч, как их определяет текущая локаль (см. lc_monetary и lc_numeric). Символы точка и запятая представляют те же символы, обозначающие десятичную точку и разделитель тысяч, но не зависят от локали.Если в шаблоне
to_char()
отсутствует явное указание положения знака, для него резервируется одна позиция рядом с числом (слева от него).n
, гдеn
— число цифр, следующих заV
.V
сto_number
подобным образом делит значение. Функцииto_char
иto_number
не поддерживаютV
с дробными числами (например,99.9V99
не допускается).Код
EEEE
(научная запись) не может сочетаться с любыми другими вариантами форматирования или модификаторами, за исключением цифр и десятичной точки, и должен располагаться в конце строки шаблона (например,9.99EEEE
— допустимый шаблон).
Для изменения поведения кодов к ним могут быть применены определённые модификаторы. Например, FM99.99
обрабатывается как код 99.99
с модификатором FM
. Все модификаторы для форматирования чисел перечислены в Таблице 9.27.
Таблица 9.27. Модификаторы шаблонов для форматирования чисел
Модификатор | Описание | Пример |
---|---|---|
Приставка FM | режим заполнения (подавляет завершающие нули и дополнение пробелами) | FM99. |
Окончание TH | окончание порядкового числительного в верхнем регистре | 999TH |
Окончание th | окончание порядкового числительного в нижнем регистре | 999th |
В Таблице 9.28 приведены некоторые примеры использования функции to_char
.
Таблица 9.28. Примеры to_char
Выражение | Результат |
---|---|
to_char(current_timestamp, 'Day, DD Hh22:MI:SS') | 'Tuesday , 06 05:39:18' |
to_char(current_timestamp, 'FMDay, FMDD Hh22:MI:SS') | 'Tuesday, 6 05:39:18' |
to_char(-0.1, '99.99') | ' -.10' |
to_char(-0.1, 'FM9.99') | '-. |
to_char(-0.1, 'FM90.99') | '-0.1' |
to_char(0.1, '0.9') | ' 0.1' |
to_char(12, '9990999.9') | ' 0012.0' |
to_char(12, 'FM9990999.9') | '0012.' |
to_char(485, '999') | ' 485' |
to_char(-485, '999') | '-485' |
to_char(485, '9 9 9') | ' 4 8 5' |
to_char(1485, '9,999') | ' 1,485' |
to_char(1485, '9G999') | ' 1 485' |
to_char(148.5, '999.999') | ' 148.500' |
to_char(148.5, 'FM999.999') | '148.5' |
to_char(148.5, 'FM999.990') | '148. |
to_char(148.5, '999D999') | ' 148,500' |
to_char(3148.5, '9G999D999') | ' 3 148,500' |
to_char(-485, '999S') | '485-' |
to_char(-485, '999MI') | '485-' |
to_char(485, '999MI') | '485 ' |
to_char(485, 'FM999MI') | '485' |
to_char(485, 'PL999') | '+485' |
to_char(485, 'SG999') | '+485' |
to_char(-485, 'SG999') | '-485' |
to_char(-485, '9SG99') | '4-85' |
to_char(-485, '999PR') | '<485>' |
to_char(485, 'L999') | 'DM 485' |
to_char(485, 'RN') | ' CDLXXXV' |
to_char(485, 'FMRN') | 'CDLXXXV' |
to_char(5. | 'V' |
to_char(482, '999th') | ' 482nd' |
to_char(485, '"Good number:"999') | 'Good number: 485' |
to_char(485.8, '"Pre:"999" Post:" .999') | 'Pre: 485 Post: .800' |
to_char(12, '99V999') | ' 12000' |
to_char(12.4, '99V999') | ' 12400' |
to_char(12.45, '99V9') | ' 125' |
to_char(0.0004859, '9.99EEEE') | ' 4.86e-04' |
SQL CONVERT INT to String
Автор: Daniel Calbimonte |
Обновлено: 15.06.2022 |
Комментарии (1) | Связанный: Подробнее > TSQL
Проблема
Мне нужно преобразовать целое число в строковое значение, какие опции доступны в
Microsoft SQL Server со сценариями T-SQL и хранимыми процедурами?
Решение
В этом руководстве мы покажем различные способы преобразования данных в SQL.
Сервер из int в строку с различными операторами SQL.
Начало работы
Допустим, у нас есть числовой столбец OrderQty в нашем WorkOrder.
таблицу в рабочей базе данных SQL.
ВЫБЕРИТЕ [КоличествоЗаказов] ОТ [Производство].[Заказ]
Когда мы пытаемся соединить символы или строку с числом в SELECT
заявление, мы получим
сообщение об ошибке.
Давайте рассмотрим пример.
SELECT 'Количество заказа:' + пробел(1) + [КоличествоЗаказа] ОТ [Производство].[Заказ]
Код выдаст следующее сообщение об ошибке:
Ошибка преобразования при преобразовании значения varchar «Количество заказа:»
к типу данных int.
Итак, по умолчанию нам нужно преобразовать OrderQty, который является числовым, в строку.
чтобы иметь возможность конкатенировать строку с номером. Для этого мы попробуем разные методы.
Функция CAST для преобразования int в строку
В следующем примере показано, как использовать функцию CAST.
В этом примере мы
преобразуют OrderQty, который является целым числом, в varchar с помощью SELECT CAST
синтаксис.
SELECT 'Количество заказа:' + пробел (1) + CAST (OrderQty as varchar (20)) as Ordqty ОТ [Производство].[Заказ]
Код возвращает следующие результаты:
Функция CONVERT для преобразования int в строку
CONVERT похож на CAST, синтаксис SELECT CONVERT немного отличается, но результат тот же.
SELECT 'Количество заказа:' + пробел (1) + CONVERT (varchar (20), OrderQty) как Ordqty ОТ [Производство].[Заказ]
Функция CONCAT для соединения разных типов данных
Другая функция для неявного преобразования при объединении значений — это
СЦЕПНАЯ функция.
В этом примере показано, как объединить строковые значения со значениями int. КОНКАТ
неявно преобразует значения в строки. Если вам нужно объединить разные данные
типы, CONCAT — лучший вариант вместо использования символа +.
SELECT CONCAT('Количество заказов:', пробел(1), OrderQty) as Ordqty ОТ [Производство].[Заказ]
Примечание. Если вам нужно преобразовать int в строку для сравнения, приведение и преобразование должны
использоваться.
Преобразование int в строку в таблице
В этом примере мы используем следующий SQL-запрос для создания таблицы с именем dbo.workorder.
на основе таблицы Production.WorkOrder из базы данных Adventureworks.
ВЫБЕРИТЕ * В dbo.workorder ОТ [Производство].[Заказ]
Использование графического интерфейса
Затем мы можем использовать графический интерфейс, чтобы изменить тип данных таблицы с int на строку.
В SSMS мы можем использовать параметр «Дизайн», чтобы изменить тип данных, щелкнув правой кнопкой мыши.
на имя таблицы.
В конструкторе измените тип данных OrderQty с int на nvarchar(50) и сохраните
изменения.
Вы можете получить следующее сообщение об ошибке.
Сохранение изменений не разрешено. Изменения, которые вы внесли, требуют следующего
таблицы, которые нужно удалить и создать заново. Вы либо внесли изменения в таблицу,
невозможно воссоздать или включить параметр Запретить сохранение изменений, требующих
таблица, которую нужно создать заново.
Чтобы устранить эту проблему, перейдите к шагу 9.0074 Инструменты > Опции и перейти к
Конструкторы > Стол
и проектировщики баз данных и снимите флажок «Запретить сохранение изменений, требующих
воссоздание» и нажмите «ОК», чтобы сохранить. Обратите внимание на сообщение ниже, что это вызовет
таблица, которую нужно создать заново.
Использование T-SQL
Если вам не нравится пользовательский интерфейс или SSMS, вы всегда можете использовать оператор ALTER.
В следующем примере показано, как установить для столбца orderqty тип данных varchar(50).
ALTER TABLE dbo.workorder ALTER COLUMN orderqty varchar(50)
Чтобы изменить тип данных на int, можно применить следующий код.
ALTER TABLE dbo.workorder ALTER COLUMN orderqty int
Преобразование int в строку в предложении WHERE
В этом SQL-запросе показано, как сравнивать строку с числовым значением. Заказ Кол-во
является числовым, и мы сравниваем его со строковым значением 8.
ВЫБЕРИТЕ ПЕРВЫЕ 5 * ИЗ dbo.workorder ГДЕ OrderQty = '8'
Обратите внимание, что оператор = может сравнивать числовое значение со строкой.
Преобразование int в строку для JOIN таблиц
Чтобы объединить две таблицы, одна из которых представляет собой строковые значения, а другая — целочисленные значения, вы
не нужно преобразовывать таблицы в другой тип данных. T-SQL преобразует и
сравнивайте неявно. Одна таблица dbo.workorder с OrderQty
типа varchar(50), а другой — Production.WorkOrder с типом OrderQty
внутр.
Следующий пример иллюстрирует, как это работает.
SELECT TOP 50 wo.Orderqty, wo.Productid, pwo.Stockedqty ОТ dbo.workorder wo ВНУТРЕННЕЕ СОЕДИНЕНИЕ Production.WorkOrder pwo ON wo.OrderQty = pwo.OrderQty
Следующие шаги
Дополнительные сведения о функции SQL CONVERT с Transact-SQL см. по следующим ссылкам:
Объединить столбцы SQL Server в строку с помощью CONCAT()
Формат чисел в SQL Server
Функции округления SQL Server — округление, потолок и пол
- Как
получить текущую дату в SQL Server Функция SQL Server GETDATE
Как SQL Server обрабатывает формат даты ГГГГ-ММ-ДД
Дата преобразования SQL в ГГГГММДД
Примеры SUBSTRING SQL Server
Функция SUBSTRING SQL Server
Создание памятки для форматов даты и времени SQL Server
Типы данных SQL Server (Integer, BigInt, SmallInt, Decimal, DateTime и т. д.)
Краткое справочное руководствоУзнайте, как преобразовывать строки с помощью SQL CAST и SQL CONVERT
Преобразование данных в Power BI с помощью R и Python
Функция SQL Server LTRIM и
Функция RTRIM
Сравните функции SQL Server — десятичные и числовые, временные метки и Rowversion,
Уникальный индекс против уникального ограничения
Об авторе
Даниэль Кальбимонте — Microsoft SQL Server MVP, сертифицированный тренер Microsoft и 6-кратный сертифицированный Microsoft ИТ-специалист. Даниэль начал свою карьеру в 2001 году и работал с SQL Server 6.0 до 2022 года. Дэниел является администратором баз данных, а также специализируется на технологиях бизнес-аналитики (SSIS, SSAS, SSRS).
Посмотреть все мои советы
Последнее обновление статьи: 15 июня 2022 г.
select — преобразовать INT в VARCHAR SQL
спросил
Изменено
2 месяца назад
Просмотрено
1,6 млн раз
Я использую Sybase, и я делаю выбор, который возвращает мне столбец с именем «iftype», но его тип — int, и мне нужно преобразовать его в varchar. Когда я пытаюсь сделать выбор без функции преобразования, я получаю эту ошибку:
Код ошибки 257, состояние SQL 37000: Неявное преобразование типа данных «VARCHAR» в «INT» не допускается.
Используйте функцию CONVERT для выполнения этого запроса.
Я не знаю, как реализовать функцию ПРЕОБРАЗОВАТЬ
. Кто-нибудь может мне помочь ?
- sql
- выберите
- преобразование типов
- sybase
1
Используйте функцию преобразования.
SELECT CONVERT(varchar(10), field_name) FROM table_name
7
Используйте функцию STR
:
SELECT STR(field_name) FROM table_name
Аргументы
float_expression
Является выражением приблизительного числового (плавающего) типа данных с десятичной точкой.
длина
Общая длина. Это включает в себя десятичную точку, знак, цифры и пробелы. По умолчанию 10.
decimal
Количество знаков справа от десятичной точки. десятичное число должно быть меньше или равно 16. Если десятичное число больше 16, то результат усекается до шестнадцати знаков справа от десятичной точки.
источник: https://msdn.microsoft.com/en-us/library/ms189527.aspx
7
Вы можете использовать функцию CAST
:
SELECT CAST(your_column_name AS varchar) FROM your_table_name
1
На самом деле вам не нужно использовать STR или Convert. Просто выберите ‘xxx’+LTRIM(ColumnName) и сделает свою работу.
Возможно, LTRIM использует Convert или STR под капотом.
LTRIM также устраняет необходимость указания длины. Кажется, он работает с целым числом или с плавающей запятой, не беспокоясь об усечении.
ВЫБРАТЬ LTRIM(имя_столбца) ИЗ имя_таблицы
также, LTRIM лучше, чем STR, поскольку
SELECT STR(1234567890.123)
дает 1234567890
тогда как
ВЫБРАТЬ LTRIM(1234567890.123)
дает 1234567890,123
2
SELECT Cast(Cast([field_name] AS BIGINT) AS NVARCHAR(255)) ОТ имя_таблицы
2
CONVERT(DATA_TYPE , Your_Column)
— это синтаксис метода CONVERT в SQL. Из этой функции преобразования мы можем преобразовать данные столбца, который находится справа от запятой (,), в тип данных слева от запятой (,). См. пример ниже.
SELECT CONVERT (VARCHAR(10), ColumnName) FROM TableName
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.