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. Функции форматирования

ФункцияТип результатаОписаниеПример
to_char(timestamp, text)textпреобразует время в текстto_char(current_timestamp, 'Hh22:MI:SS')
to_char(interval, text)textпреобразует интервал в текстto_char(interval '15h 2m 12s', 'Hh34:MI:SS')
to_char(int, text)textпреобразует целое в текстto_char(125, '999')
to_char(double precision, text)textпреобразует плавающее одинарной/двойной точности в текстto_char(125. 8::real, '999D9')
to_char(numeric, text)textпреобразует числовое значение в текстto_char(-125.8, '999D99S')
to_date(text, text)dateпреобразует текст в датуto_date('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text)numericпреобразует текст в числоto_number('12,454.8-', '99G999D9S')
to_timestamp(text, text)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. M., 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. d.обозначение эры (с точками)
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 г. до н. э. 00:00 по местному времени; см. Раздел B.7)
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 действует только на следующий код, тогда как в Oracle FM её действие распространяется на все последующие коды, пока не будет отключено последующим модификатором 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. 99
Окончание 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')'-. 1'
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. 500'
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. 2, 'FMRN')'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

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.