Преобразование типов данных в SQL Server

#sql #sql-server #type-conversion

#sql #sql-сервер #преобразование типов

Вопрос:

Мне нужно изменить некоторые типы данных. Я пытался использовать CAST ключевое слово, но это не устраняет проблему. Любые предложения о том, как переписать эти две строки с CAST помощью операторов?

  1. При приведении из в может произойти потеря VarChar(100) данных VarChar(20) .

Код:

 SELECT TOP 1 @variableId = variableId
FROM @tempTable
  
  1. При приведении из в может произойти потеря NVarChar(512) данных NVarChar .

Код:

 SELECT myVariable
FROM tableName
  

Я попытался сделать что-то вроде следующего, но все равно выдает ошибку:

 CAST((myVariable) as nvarchar)
  

Комментарии:

1. В чем ваша проблема? При сокращении символьной строки данные могут быть потеряны. Это ожидаемо и почему вы получаете предупреждение.

2. Пожалуйста, будьте более конкретны. Что вы пробовали? Как выглядят ваши данные и схема? Предоставленные вами сообщения объясняют сами себя: ваш целевой тип — to small, чтобы сохранить данные из исходного типа данных.

3. Хорошо, дайте мне минуту, и я обновлю сообщение!

Ответ №1:

CAST используется для преобразования между типами данных. Это больше похоже на то, что вы должны использовать LEFT вместо:

 SELECT TOP 1 @variableId = LEFT(variableId,20)
FROM @tempTable
  

Это не даст вам никакого предупреждения, поскольку система предполагает, что вы уже знаете, что потеряете правильные 80 символов.

Ответ №2:

Для использования CONVERT вместо CAST :

 CONVERT(nvarchar, myVariable)
  

Является допустимым синтаксисом, а также:

 CONVERT(varchar(20), myVariable)
  

Но для получения части строки мы используем SUBSTRING() или LEFT() или RIGHT() функции, подобные этой:

  • SUBSTRING( value_expression , start_expression , length_expression )

    Возвращает часть символьного, двоичного, текстового или графического выражения.

  • LEFT ( character_expression , integer_expression )

    Возвращает левую часть символьной строки с указанным количеством символов.

  • RIGHT ( character_expression , integer_expression )

    Возвращает правую часть символьной строки с указанным количеством символов.