Составить рассказ об ашик керибе используя слова и выражения из текста

Статья 11/08/2021 чтение занимает 5 мин в этой статье строка это объект типа string, значением которого является текст. внутри
  • Статья
  • Чтение занимает 5 мин

Строка — это объект типа String, значением которого является текст. Внутри программы текст хранится в виде упорядоченной коллекции объектов Char только для чтения. В конце строки C# нет нуль-символов. Поэтому строка C# может содержать любое число внедренных нуль-символов (‘’). Свойство Length строки соответствует числу содержащихся в ней объектов Char, но не числу символов Юникода. Для доступа к отдельным кодовым точкам Юникода в строке используйте объект StringInfo.

Сравнение строки и System.String

В C# ключевое слово string является псевдонимом для String. Таким образом, String и string являются эквивалентами. Однако рекомендуется использовать предоставленный псевдоним string, так как он работает даже без using System;. Класс String предоставляет множество методов для безопасного создания, обработки и сравнения строк. Кроме того, язык C# перегружает некоторые операторы для упрощения типичных операций со строками. Дополнительные сведения о ключевых словах см. в статье, посвященной строкам. Дополнительные сведения о типе и его методах см. здесь: String.

Объявление и инициализация строк

Вы можете объявлять и инициализировать строки различными способами, как показано в следующем примере:

// Declare without initializing.
string message1;

// Initialize to null.
string message2 = null;

// Initialize as an empty string.
// Use the Empty constant instead of the literal "".
string message3 = System.String.Empty;

// Initialize with a regular string literal.
string oldPath = "c:Program FilesMicrosoft Visual Studio 8.0";

// Initialize with a verbatim string literal.
string newPath = @"c:Program FilesMicrosoft Visual Studio 9.0";

// Use System.String if you prefer.
System.String greeting = "Hello World!";

// In local variables (i.e. within a method body)
// you can use implicit typing.
var temp = "I'm still a strongly-typed System.String!";

// Use a const string to prevent 'message4' from
// being used to store another string value.
const string message4 = "You can't get rid of me!";

// Use the String constructor only when creating
// a string from a char*, char[], or sbyte*. See
// System.String documentation for details.
char[] letters = { 'A', 'B', 'C' };
string alphabet = new string(letters);

Обратите внимание, что вы не используете оператор new для создания объекта строки, за исключением случаев инициализации строки с помощью массива символов.

Инициализируйте строку с константным значением Empty для создания нового объекта String, строка которого имеет нулевую длину. Представлением строкового литерала строки с нулевой длиной является «». Если вы инициализируете строки со значением Empty вместо NULL, вы снизите вероятность появления исключения NullReferenceException. Используйте статический метод IsNullOrEmpty(String), чтобы проверить значение строки, прежде чем пытаться получить к ней доступ.

Неизменность строковых объектов

Строковые объекты являются неизменяемыми: их нельзя изменить после создания. Может показаться, что все методы String и операторы C# изменяют строку, но в действительности они возвращают результаты в новый строковый объект. Когда содержимое s1 и s2 объединяется для формирования одной строки, две исходные строки не изменяются, как показано в следующем примере. Оператор += создает новую строку, которая содержит объединенное содержимое. Этот новый объект присваивается переменной s1, а исходный объект, который был присвоен s1, освобождается для сборки мусора, так как ни одна переменная не ссылается на него.

string s1 = "A string is more ";
string s2 = "than the sum of its chars.";

// Concatenate s1 and s2. This actually creates a new
// string object and stores it in s1, releasing the
// reference to the original object.
s1 += s2;

System.Console.WriteLine(s1);
// Output: A string is more than the sum of its chars.

Так как «изменение» строки на самом деле является созданием новой строки, создавать ссылки на строки следует с осторожностью. Если вы создадите ссылку на строку, а затем «измените» исходную строку, ссылка будет по-прежнему указывать на исходный объект, а не на новый объект, который был создан при изменении строки. Это поведение проиллюстрировано в следующем коде:

string s1 = "Hello ";
string s2 = s1;
s1 += "World";

System.Console.WriteLine(s2);
//Output: Hello

Сведения о создании новых строк, основанных на таких изменениях, как операции поиска и замены исходной строки, см. в инструкциях по изменению содержимого строки.

Регулярные и буквальные строковые литералы

Используйте регулярные строковые литералы, когда вам нужно внедрить escape-символы, доступные в C#, как показано в следующем примере:

string columns = "Column 1tColumn 2tColumn 3";
//Output: Column 1        Column 2        Column 3

string rows = "Row 1rnRow 2rnRow 3";
/* Output:
  Row 1
  Row 2
  Row 3
*/

string title = ""The u00C6olean Harp", by Samuel Taylor Coleridge";
//Output: "The Æolean Harp", by Samuel Taylor Coleridge

Буквальные строковые литералы используются для удобства и читабельности, если текст строки содержит символы обратной косой черты, например в путях к файлам. Так как буквальные строки сохраняют символы новой строки как часть текста строки, их можно использовать для инициализации многострочных строк. Используйте двойные кавычки, чтобы вставить кавычки в буквальной строке. В следующем примере показаны наиболее часто используемым буквальные строки:

string filePath = @"C:UsersscoleridgeDocuments";
//Output: C:UsersscoleridgeDocuments

string text = @"My pensive SARA ! thy soft cheek reclined
    Thus on mine arm, most soothing sweet it is
    To sit beside our Cot,...";
/* Output:
My pensive SARA ! thy soft cheek reclined
   Thus on mine arm, most soothing sweet it is
   To sit beside our Cot,...
*/

string quote = @"Her name was ""Sara.""";
//Output: Her name was "Sara."

Escape-последовательности строк

Escape-последовательность Имя символа Кодировка Юникод
Одинарная кавычка 0x0027
« Двойная кавычка 0x0022
Обратная косая черта 0x005C
Null 0x0000
a Предупреждение 0x0007
b Backspace 0x0008
f Перевод страницы 0x000C
n Новая строка 0x000A
r Возврат каретки 0x000D
t Горизонтальная табуляция 0x0009
v Вертикальная табуляция 0x000B
u Escape-последовательность Юникода (UTF-16) uHHHH (диапазон: 0000–FFFF; пример: u00E7 = «ç»)
U Escape-последовательность Юникода (UTF-32) U00HHHHHH (диапазон: 000000–10FFFF; пример: U0001F47D = «?»)
x Escape-последовательность Юникода аналогична «u», она отличается только длиной переменной xH[H][H][H] (диапазон: 0–FFFF; пример: x00E7 или x0E7 или xE7 = «ç»)

Предупреждение

Если вы используете escape-последовательность x с менее чем четырьмя шестнадцатеричными цифрами, то когда непосредственно следующие за ней символы также являются допустимыми шестнадцатеричными цифрами (т. е. 0–9, A–F и a–f), они будут интерпретированы как часть этой escape-последовательности. Например, xA1 дает результат «¡», являющийся кодовой точкой U+00A1. Однако если следующий символ — «A» или «a», тогда escape-последовательность будет интерпретироваться как xA1A и даст результат «ਚ», являющийся кодовой точкой U+0A1A. В таких случаях, чтобы избежать некорректной интерпретации, указывайте все четыре шестнадцатеричных знака (например, x00A1).

Примечание

Во время компиляции буквальные строки преобразуются в обычные строки с теми же escape-последовательностями. Поэтому, если вы просматриваете буквальную строку в окне контрольных значений отладчика, вы увидите escape-символы, добавленные компилятором, а не буквальную версию из исходного кода. Например, буквальная строка @"C:files.txt"будет отображаться в окне контрольных значений как «C:files.txt».

Строки формата

Строка формата — это строка, содержимое которой можно определить динамически во время выполнения. Строки формата создаются путем внедрения интерполированных выражений или заполнителей внутри фигурных скобок в строке. Весь код внутри фигурных скобок ({...}) будет преобразован в значение и выходные данные как отформатированная строка во время выполнения. Существует два способа создания строк формата: интерполяция строк и составное форматирование.

Интерполяция строк

В C# 6.0 и более поздних версий интерполированные строки определяются по специальному символу $. Они включают интерполированные выражения в фигурных скобках. См. дополнительные сведения в интерактивном руководстве по интерполяции строк в C#.

Используйте интерполяцию для повышения удобства чтения и обслуживаемости кода. Интерполяция строк позволяет достичь тех же результатов, что и использование метода String.Format, но более простым и понятным способом.

var jh = (firstName: "Jupiter", lastName: "Hammon", born: 1711, published: 1761);
Console.WriteLine($"{jh.firstName} {jh.lastName} was an African American poet born in {jh.born}.");
Console.WriteLine($"He was first published in {jh.published} at the age of {jh.published - jh.born}.");
Console.WriteLine($"He'd be over {Math.Round((2018d - jh.born) / 100d) * 100d} years old today.");

// Output:
// Jupiter Hammon was an African American poet born in 1711.
// He was first published in 1761 at the age of 50.
// He'd be over 300 years old today.

Начиная с C# 10, можно использовать интерполяцию строк для инициализации константной строки, если все выражения, используемые для заполнителей, также являются константными строками.

Составное форматирование

String.Format использует заполнители в фигурных скобках, чтобы создать строку формата. В этом примере результат аналогичен выходным данным, получаемым с помощью метода интерполяции строк, описанного выше.

var pw = (firstName: "Phillis", lastName: "Wheatley", born: 1753, published: 1773);
Console.WriteLine("{0} {1} was an African American poet born in {2}.", pw.firstName, pw.lastName, pw.born);
Console.WriteLine("She was first published in {0} at the age of {1}.", pw.published, pw.published - pw.born);
Console.WriteLine("She'd be over {0} years old today.", Math.Round((2018d - pw.born) / 100d) * 100d);

// Output:
// Phillis Wheatley was an African American poet born in 1753.
// She was first published in 1773 at the age of 20.
// She'd be over 300 years old today.

См. дополнительные сведения о типах форматирования в .NET.

Подстроки

Подстрока — это последовательность символов, содержащихся в строке. Используйте метод Substring, чтобы создать новую строку из части исходной строки. Одно вхождение подстроки или несколько можно найти с помощью метода IndexOf. Используйте метод Replace, чтобы заменить все вхождения указанной подстроки новой строкой. Как и метод Substring, метод Replace фактически возвращает новую строку и не изменяет исходную строку. См. дополнительные сведения о поиске строк и изменении содержимого строк.

string s3 = "Visual C# Express";
System.Console.WriteLine(s3.Substring(7, 2));
// Output: "C#"

System.Console.WriteLine(s3.Replace("C#", "Basic"));
// Output: "Visual Basic Express"

// Index values are zero-based
int index = s3.IndexOf("C");
// index = 7

Доступ к отдельным символам

Используя нотацию массива со значением индекса, можно получить доступ только для чтения к отдельным символам, как показано в следующем примере:

string s5 = "Printing backwards";

for (int i = 0; i < s5.Length; i++)
{
    System.Console.Write(s5[s5.Length - i - 1]);
}
// Output: "sdrawkcab gnitnirP"

Если вам необходимо изменить отдельные символы в строке и функций методов String вам недостаточно, используйте объект StringBuilder, чтобы изменить отдельные символы «на месте», а затем создайте новую строку для сохранения результатов с помощью методов StringBuilder. В следующем примере предположим, что необходимо определенным образом изменить исходную строку, а затем сохранить результаты для дальнейшего использования:

string question = "hOW DOES mICROSOFT wORD DEAL WITH THE cAPS lOCK KEY?";
System.Text.StringBuilder sb = new System.Text.StringBuilder(question);

for (int j = 0; j < sb.Length; j++)
{
    if (System.Char.IsLower(sb[j]) == true)
        sb[j] = System.Char.ToUpper(sb[j]);
    else if (System.Char.IsUpper(sb[j]) == true)
        sb[j] = System.Char.ToLower(sb[j]);
}
// Store the new string.
string corrected = sb.ToString();
System.Console.WriteLine(corrected);
// Output: How does Microsoft Word deal with the Caps Lock key?

Строки NULL и пустые строки

Пустая строка — это экземпляр объекта System.String, который содержит нуль символов. Пустые строки часто используются в различных сценариях программирования для представления пустого текстового поля. Вы можете вызывать методы для пустых строк, так как они являются допустимыми объектами System.String. Пустые строки инициализируются следующим образом:

string s = String.Empty;  

В отличие от пустых строк строка NULL не ссылается на экземпляр объекта System.String, поэтому любая попытка вызвать метод для строки NULL приводит к исключению NullReferenceException. Но вы можете использовать строки NULL в операциях объединения и сравнения с другими строками. В следующих примерах показаны случаи, в которых ссылка на строку NULL вызывает и не вызывает исключение:

static void Main()
{
    string str = "hello";
    string nullStr = null;
    string emptyStr = String.Empty;

    string tempStr = str + nullStr;
    // Output of the following line: hello
    Console.WriteLine(tempStr);

    bool b = (emptyStr == nullStr);
    // Output of the following line: False
    Console.WriteLine(b);

    // The following line creates a new empty string.
    string newStr = emptyStr + nullStr;

    // Null strings and empty strings behave differently. The following
    // two lines display 0.
    Console.WriteLine(emptyStr.Length);
    Console.WriteLine(newStr.Length);
    // The following line raises a NullReferenceException.
    //Console.WriteLine(nullStr.Length);

    // The null character can be displayed and counted, like other chars.
    string s1 = "x0" + "abc";
    string s2 = "abc" + "x0";
    // Output of the following line: * abc*
    Console.WriteLine("*" + s1 + "*");
    // Output of the following line: *abc *
    Console.WriteLine("*" + s2 + "*");
    // Output of the following line: 4
    Console.WriteLine(s2.Length);
}

Использование класса StringBuilder для быстрого создания строк

Операции со строками в .NET хорошо оптимизированы, и в большинстве случаев они не снижают производительность. Но в некоторых сценариях, например в сплошных циклах, которые выполняются сотни и тысячи раз, операции со строками могут повлиять на производительность. Класс StringBuilder создает строковый буфер, который ускоряет работу, если программа выполняет много операций над строками. Строка StringBuilder также позволяет заново присваивать отдельные символы, что не поддерживает встроенный строковый тип данных. Например, этот код изменяет содержимое строки без создания новой строки:

System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");
sb[0] = 'C';
System.Console.WriteLine(sb.ToString());
System.Console.ReadLine();

//Outputs Cat: the ideal pet

В этом примере объект StringBuilder используется для создания строки из набора числовых типов:

using System;
using System.Text;

namespace CSRefStrings
{
    class TestStringBuilder
    {
        static void Main()
        {
            var sb = new StringBuilder();

            // Create a string composed of numbers 0 - 9
            for (int i = 0; i < 10; i++)
            {
                sb.Append(i.ToString());
            }
            Console.WriteLine(sb);  // displays 0123456789

            // Copy one character of the string (not possible with a System.String)
            sb[0] = sb[9];

            Console.WriteLine(sb);  // displays 9123456789
            Console.WriteLine();
        }
    }
}

Строки, методы расширения и LINQ

Так как тип String использует IEnumerable<T>, вы можете применять методы расширения, определенные для строк в классе Enumerable. Чтобы избежать визуального загромождения, эти методы исключены из IntelliSense для типа String, но все равно доступны. Можно также использовать выражения запроса LINQ в строках. Дополнительные сведения см. в документации по LINQ и строкам.

Раздел Описание
Практическое руководство. Изменение содержимого строки Описание методов преобразования строк и изменения их содержимого.
Сравнение строк Рассказывает, как строки сравниваются по языку, региональным параметрам и порядку.
Сцепка нескольких строк Демонстрирует разные способы соединения нескольких строк в одну.
Анализ строк с помощью метода String.Split Содержит примеры кода, демонстрирующие использование метода String.Split для анализа строк.
Практическое руководство. Поиск по строкам Описание использования поиска для нахождения в строках определенных шаблонов или текста.
Определение представления числового значения в строке Объясняет, как безопасно проанализировать строку, чтобы проверить, содержит ли она допустимое числовое значение.
Интерполяция строк Описывает функцию интерполяции строк, которая предоставляет удобный синтаксис для форматирования строк.
Базовые операции со строками в .NET Framework Содержит ссылки на статьи, в которых показаны базовые операции над строками с помощью методов System.String и System.Text.StringBuilder.
Анализ строк в .NET Описывает, как преобразовать строковые представления базовых типов .NET в экземпляры соответствующих типов.
Синтаксический анализ строк даты и времени в .NET Показывает, как преобразовать строку, например «01/24/2008», в объект System.DateTime.
Сравнение строк в .NET Framework Объясняет, как сравнивать строки, и содержит примеры на языках C# и Visual Basic.
Using the StringBuilder class (Использование класса StringBuilder) Описывает создание и изменение динамических строковых объектов с помощью класса StringBuilder.
LINQ и строки Содержит инструкции по выполнению различных операций со строками с помощью запросов LINQ.
Руководство по программированию на C# Содержит ссылки на статьи с конструкциями программирования на C#.

Ответы на вопросы учебника «Литературное чтение» 3 класс, 1 часть, Климанова, Горецкий к сказке В. Одоевского «Мороз Иванович», страницы 207-208

УКМ «Школа России»

1. Как ты думаешь, почему Одоевский назвал сказку «Мороз Иванович»?

Главные героини сказки — две девочки. Но и Мороз Иванович очень важный, центральный персонаж. С его помощью удаётся вознаградить добро и наказать зло. Мороз Иванович проверяет личные качества девочек, показывает разницу между ними.

Автор назвал сказку именно так, потому что Мороз Иванович выступает в ней в роли беспристрастного судьи.

2. Сравни главных героинь сказки.

Как проводила свой день каждая из девочек?

Рукодельница вставала рано и весь день трудилась. Ленивица весь день спала и сама ничего не делала, только няню просила.

Почему Рукодельница попала в колодец? А Ленивица?

Рукодельница ходила за водой и уронила ведро. Няня послала её в колодец за ведром. Ленивица полезла в колодец, чтобы получить дары от Мороза Ивановича.

Как вели себя девочки при встрече с яблонькой и печкой?

Рукодельница достала пирожок и обтрясла яблоню. А потом поделилась этим с Морозом Ивановичем. Ленивица не стала доставать пирожок и отказалась трясти яблоню.

Различается ли поведение Рукодельницы и Ленивицы?

Рукодельница показала себя трудолюбивой, отзывчивой и вежливой девочкой. Ленивица была ленивой, грубой, эгоистичной.

Какие подарки получили героини? Почему?

Рукодельница получила горсть серебряных пятаков и бриллиант, потому что честно и добросовестно поработала, была вежливой и почтительной.

Ленивица получила слиток ртутит и сосульку, потому что она ничего не сделала из того, о чём её просил Мороз Иванович, была грубой и своевольной.

3. Есть ли в сказке волшебные предметы? Как пользуются ими Рукодельница и Ленивица? Помогают ли эти предметы понять характер девочек, их привычки?

В сказке есть следующие волшебные предметы: печка, яблоня, перина Мороза Ивановича.

Рукодельница достала пирожок, обтрясла яблоню и угостила Мороза Ивановича. Она взбила перину, хотя у неё сильно замёрзли руки. Это показывает то, что она была доброй, отзывчивой, щедрой, старательной и трудолюбивой. Она привыкла всё делать сама.

Ленивица отказала печке и яблоне, перину не взбила. Это показало нам, что девочка была грубой, эгоистичной, ленивой, хитрой, равнодушной. Она не привыкла что-либо делать сама.

4. Расскажи о Рукодельнице и Ленивице используя опорные слова.

Рукодельница была трудолюбивой девочкой. Она ни минуты не сидела спокойно, всё время что-то делала. Она была заботливой и доброй девочкой, стремилась помочь другим, уважала старость, была вежливой. Когда её о чём-то просили, например, яблонька и печка, она охотно помогала, ведь она была отзывчивой.

Ленивица была ленивой, никогда ничего не делала и не хотела делать. Она была равнодушной и невнимательной. Если её о чём-то просили, она отказывала в грубой форме. Она была очень грубой девочкой. И она была неблагодарной, от неё нельзя было услышать вежливого слова.

5. Как автор относится к Рукодельнице и Ленивице? Почему ты так думаешь?

Автор относится к Рукодельнице с любовью и уважением. Мы видим это в отношении к девочке Мороза Ивановича. Он ласковый, добрый и щедрый. Он награждает Рукодельницу, и это является выражением личного отношения автора.

Автор относится к Ленивице с неодобрением и насмешкой. Ему не нравится её лень и грубость. И Ленивица получает от Мороза Ивановича смешной подарок — сосульку. Этим автор показывает своё к ней отношение.

6. Вспомни, как Одоевский начинает свою сказку. Объясни пословицу. Как она помогает понять смысл произведения?

Сказка начинается пословицей о том, что даром без труда ничего не даётся.

Это значит, что человек сам должен заслужить своё счастье. И заслужить его в труде. Тот, кто трудится, будет иметь всё. Тот, кто ленится, не будет иметь ничего.

Так и случилось в сказке. Рукодельница получила богатый дар за свой труд. Ленивица не получила ничего за свою лень.

Эта пословица выражает главную мысль сказки.

7. Как ты понимаешь выражения:

Жить и служить — разница. Живут для себя и для людей, служат только кому-то. Служить — значит подчиняться, делать не то, что хочется, а то, что нужно.

Работа работе рознь. Работу можно делать по-разному. Можно делать хорошо и плохо. За хорошую работу награждают, за плохую ругают.

Какова работа, такова и награда. За хорошо сделанную работу всегда похвалят и наградят, за плохую — отругают. Награда соответствует качеству проделанной работы.

8. Каким обращением к детям заканчивается сказка? Как бы ты ответил на вопросы «Что правда, а что неправда»? Что сказано шутки ради, а что в наставленье?

Автор предлагает детям самим подумать о том, что в сказке правда, а что нет, что сказано для наставления, а что ради шутки.

Мне кажется, что наставление этой сказки заключается в том, что люди должны быть добрыми, честными, вежливыми и трудолюбивыми.

Шутка этой сказки в том, как плохо получается работа у Ленивицы, у того, кто не хочет и не любит работать.

Правда этой сказки в том, что труд всегда приносит пользу человеку, а вежливость и отзывчивость помогают в отношении с другими людьми.

Неправды здесь нет, а есть сказка, то, что не может произойти в реальной жизни.

9. Вспомни русскую народную сказку «Морозко». Попробуй сравнить её со сказкой Одоевского. Что ты видишь в этих сказках общего, чем они отличаются друг от друга? Что нового открыла тебе сказка в переложении Одоевского?

Пример сравнения народной сказки «Морозко» и литературной сказки «Мороз Иванович» можно посмотреть, перейдя по ссылке.

Общее в этих сказках то, что добро вознаграждается, а зло наказывается. Различное в этих сказках то, что народная показывает пользу вежливости и смирения, а литературная говорит ещё и о пользе трудолюбия.

Сказка Одоевского рассказала мне о различных явлениях природы: о траве под снегом, о холодной воде в колодце, о том, как правильно топить печь.

10. Раздели сказку на части. Озаглавь их. Перескажи текст, используя свои рисунки.

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

1

Последнее обновление: 10.11.2021

Консольный вывод

Для вывода информации на консоль мы уже использовали встроенный метод Console.WriteLine.
То есть, если мы хотим вывести некоторую информацию на консоль, то нам надо передать ее в метод Console.WriteLine:

string hello = "Привет мир";
Console.WriteLine(hello);
Console.WriteLine("Добро пожаловать в C#!");
Console.WriteLine("Пока мир...");
Console.WriteLine(24.5);

Консольный вывод:

Привет мир!
Добро пожаловать в C#!
Пока мир...
24,5

Нередко возникает необходимость вывести на консоль в одной строке значения сразу нескольких переменных. В этом случае мы можем использовать прием, который
называется интерполяцией:

string name = "Tom";
int age = 34;
double height = 1.7;
Console.WriteLine($"Имя: {name}  Возраст: {age}  Рост: {height}м");

Для встраивания отдельных значений в выводимую на консоль строку используются фигурные скобки, в которые заключается встраиваемое значение.
Это можем значение переменной ({name}) или более сложное выражение (например, операция сложения {4 + 7}). А перед всей строкой ставится знак доллара $.

При выводе на консоль вместо помещенных в фигурные скобки выражений будут выводиться их значения:

Имя: Tom  Возраст: 34  Рост: 1,7м

Есть другой способ вывода на консоль сразу нескольких значений:

string name = "Tom";
int age = 34;
double height = 1.7;
Console.WriteLine("Имя: {0}  Возраст: {2}  Рост: {1}м", name, height, age);

Здесь мы видим, что строка в Console.WriteLine содержит некие числа в фигурных скобках: {0}, {1}, {2}. Это плейсхолдеры, вместо которых при выводе строки на консоль
будут подставляться некоторые значения. Подставляемые значения указываются после строки через запятую.

При этом важен порядок подобных плейсхолдеров. Например, в данном случае после строки первой указана переменная name, потом height и потом age. Поэтому значение переменной name будет всавляться вместо
первого плейсхолдера — {0} (нумерация начинается с нуля), height — вместо {1}, а age — вместо {2}. Поэтому в итоге пи выводе на консоль строка

"Имя: {0}  Возраст: {2}  Рост: {1}м"

будет заменена на

"Имя: Tom  Возраст: 34  Рост: 1,7м"

Console.Write

Кроме Console.WriteLine() можно также использовать метод Console.Write(), он работает точно так же за тем исключением,
что не добавляет переход на следующую строку, то есть последующий консольный вывод будет выводиться на той же строке.

string name = "Tom";
int age = 34;
double height = 1.7;
Console.Write($"Имя: {name}  Возраст: {age}  Рост: {height}м");

Консольный ввод

Кроме вывода информации на консоль мы можем получать информацию с консоли. Для этого предназначен метод Console.ReadLine(). Он позволяет получить введенную строку.

Console.Write("Введите свое имя: ");
string? name = Console.ReadLine();
Console.WriteLine($"Привет {name}");

В данном случае все, что вводит пользователь, с помощью метода Console.ReadLine() передается в переменную name.

Пример работы программы:

Введите свое имя: Том
Привет Том

Особенностью метода Console.ReadLine() является то, что он может считать информацию с консоли только в виде строки. Кроме того, возможная ситуация, когда для метода
Console.ReadLine не окажется доступных для считывания строк, то есть когда ему нечего считывать, он возвращаает значение null, то есть, грубо говоря, фактически отсутствие значения.
И чтобы отразить эту ситуацию мы определяем переменную name, в которую получаем ввод с консоли, как переменную типа string?. Здесь string указывает,
что переменная может хранить значения типа string, то есть строки. А знак вопроса ? указывает, что переменная также может хранить значение null, то есть по сути не иметь никакого значения. Далее мы более подробно разберем
null и как с ним работать.

Однако, может возникнуть вопрос, как нам быть, если, допустим, мы хотим ввести возраст в переменную типа int или другую информацию
в переменные типа double или decimal? По умолчанию платформа .NET предоставляет ряд методов, которые позволяют преобразовать различные значения к типам int, double и т.д. Некоторые из этих методов:

  • Convert.ToInt32() (преобразует к типу int)

  • Convert.ToDouble() (преобразует к типу double)

  • Convert.ToDecimal() (преобразует к типу decimal)

Пример ввода значений:

Console.Write("Введите имя: ");
string? name = Console.ReadLine();

Console.Write("Введите возраст: ");
int age = Convert.ToInt32(Console.ReadLine());

Console.Write("Введите рост: ");
double height = Convert.ToDouble(Console.ReadLine());

Console.Write("Введите размер зарплаты: ");
decimal salary = Convert.ToDecimal(Console.ReadLine());

Console.WriteLine($"Имя: {name}  Возраст: {age}  Рост: {height}м  Зарплата: {salary}$");

При вводе важно учитывать текущую операционную систему. В одних культурах разделителем между целой и дробной частью является точка (США, Великобритания…),
в других — запятая (Россия, Германия…). Например, если текущая ОС — русскоязычная, значит, надо вводить дробные числа с разделителем запятой.
Если локализация англоязычная, значит, разделителем целой и дробной части при вводе будет точка.

Пример работы программы:

Введите имя: Том
Введите возраст: 25
Введите рост: 1,75
Введите размер зарплаты: 300,67
Имя: Том  Возраст: 25  Рост: 1,75м  Зарплата: 300,67$

пересекаем двенадцать месяцев, словно двенадцать разных стран. В. Мы летим на нашей Земле, как на огромной ракете. Г. Проплывают мимо зеленое лето, золотая осень, белая зима, и лазоревая весна. А1 В каком порядке должны следовать предложения, чтобы получился текст? 1)А,Г,Б,В 2) А, В, Б, Г 3)А,Г,Б,В 4) А, В, Г, Б А2 Найдите предложение, соответствующее характеристике: повествовательное, невосклицательное, простое, двусоставное, распространенное, с однородными членами. 1)А 2)Б 3)В 4)Г А3 У какого слова неправильно определены морфологические при­знаки? 1 ) Земле — существительное, собственное, 1 -го склонения. 2) Летим — глагол, несовершенного вида, 1-го спряжения. 3) Мы — личное местоимение, 1-гб лица, множественного числа. 4) (На) огромной — прилагательное, в полной форме, относи­тельное. А4 Укажите предложение с пунктуационной ошибкой. 1)А 2)Б 3)В 4) Г А5 В каком ряду во всех словах пишется буква о? 1) к…саться, наг…р, р…стов 2) неприк.. .сновенность, сг.. .ранив, р.. .стовщик 3) разг.. .реться, подр.. .стающий, к.. .сательная 4) дог.. .рать, к.. .снуться, р.. .стение А6 Найдите слово с орфографической ошибкой. 1) благословить 2) безоблачный 3) предистория 4) исчезнуть А7 В каком ряду пропущена одна и та же буква? 1) пр…балтика, пр…тензия, пр…чуда 2) пр…лестный, пр…града, пр…одолевать 3) пр.. .вычка, пр.. .рода, пр.. .людия 4) прекратить, пр…вязать, пр…готовить А8 В каком слове пишется буква е? 1) посв…щение 2) неув.. .дающий 3) увл.. .кательный 4) вы…снять А9 Выберите фразеологизм, имеющий значение «человек с очень плохой памятью». 1) ветреная голова 2) голова садовая 3) дырявая голова 4) голова соломой набита А10 Укажите слово с нулевым окончанием. 1) всегда 2)дисциплина 3) байдарка 4) учился А11 В каком ряду все слова профессионализмы? 1) художник, пилотирование, ангар 2) кризис, финансы, декларация 3) ландшафт, рельеф, равнина 4) этимология, лингвистика, слово А12 В каком ряду все слова однокоренные? 1) беседа, бес, беседовать 2) гора, горевать, гористый 3) вода, водяной, водянистый 4) знаменитый, знамя, знаменитость А13 В каком слове пишется непроизносимая согласная буква? 1) древес… ный 2) словес… ный 3) извес…ный 4) тел ее… ный А14 В каком словосочетании слово употреблено в прямом значении? 1) широкий кругозор 2) широкая общественность 3) широкая улица 4) широкая известность А15 В какой строчке во всех словах пишется буква е? 1) в ярост…, о времен…, завис…шь, узна…шь 2) в ине…, к свобод…, тян…т, расцвета…т 3) по тревог…, на машин…, гуля…т, пен…тся 4) о нежност…, в семен…, обгон…шь, тревож.. .т А16 В каком предложении допущена пунктуационная ошибка? 1) Около санатория есть озеро, и из него вытекает ручей. 2) Уж сколько раз твердили миру, что лесть гнусна, вредна. 3) Сплеча, да сгоряча ничего не делай. 4) Солнце теплое ходит высоко и душистого ландыша ждет. А17 Укажите предложение, в котором нужно поставить тире (знаки препинания не расставлены). 1) Ночь тиха и безлунна. 2) Хороший вкус это прежде всего чувство меры. 3) Правда в огне не горит и в воде не тонет. 4) Кузнец Архип сказал теперь все ладно, хорошо горит. А18 Найдите предложение с прямой речью (знаки препинания не расставлены). 1) Я говорил вам что нынче будет непогода. 2) Вы переведены сюда из города. 3) Казбич нетерпеливо прервал его где тебе ездить на моем коне. 4) Паустовский утверждал что в русском языке есть великое мно­жество хороших слов. Прочитайте текст и выполните задания А19 – А21, В1— В5, С (1) Я сидел на террасе и смотрел вниз на голубое море, рассти­лавшееся до горизонта живой пеленой. (2) Пышное летнее солнце садилось за горами, но тени ложились только внизу. (3) Безлюдное море, на котором только изредка медленно прохо­дил черный морской пароход, казалось мне безжизненным и пустын­ным, вечные вздохи прибоя отзывались в сердце надрывной, тоскли­вой болью. (4) Над головой высились скалистые, серые, лишенные расти­тельности горы, давили душу каменной тяжестью своей. (5) Мне казалось, что судьба загнала меня на край земли, на котором сижу я, свесивши ноги в море, и вот-вот брошусь туда в необъяснимой тоске. (6) Блекло золото солнечных красок. (7) Быстрее расползались тени под горой, падая на мерно вздыхающее, опечаленное море, темнела его яркая лазурь. (8) Весь берег охватила мягкими объятия­ми своими предвечерняя тонкая печаль . А19 Какое утверждение противоречит точке зрения автора? 1) Море казалось безжизненным. 2) Над головой высились черные уступы. 3) Золото красок меркло. 4) Море мерно вздыхало. А20 Укажите, чем является словосочетание «тонкая печаль» (предложение 8). 1) олицетворение 2)гипербола 3) метафора 4) эпитет А21 Определите стиль и тип речи. 1) публицистический, рассуждение 2) художественный, рассуждение 3) художественный, описание 4) публицистический, описание Часть 2 Ответы к заданиям В1 – В3 запишите словом (-ами) В1 Назовите часть речи, к которой принадлежит слово блекло (предложение 6). В2 Из предложения 5 выпишите относительное местоимение. В3 Из предложения 8 выпишите грамматическую основу. Ответы к заданиям 64 — В5 запишите цифрами В4 Укажите номера простых предложений с однородными сказуемыми. В5 Сколько грамматических основ в предложении 3? Часть 3 (С)_ Напишите сочинение, опираясь на данный текст. Как при на­блюдении за природой изменилось ваше настроение?

  • Статья
  • Чтение занимает 25 мин

Применимо к: даSQL Server (все поддерживаемые версии) ДаБаза данных SQL Azure ДаУправляемый экземпляр SQL Azure даAzure Synapse Analytics даПараллельное хранилище данных

Эти функции преобразуют выражение одного типа данных в другой.

Синтаксис

-- CAST Syntax:  
CAST ( expression AS data_type [ ( length ) ] )  
  
-- CONVERT Syntax:  
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )  

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Аргументы

expression
Любое допустимое выражение.

data_type
Целевой тип данных. Это может быть xml, bigint и sql_variant. Псевдонимы типов данных недопустимы.

length
Указываемое дополнительно целое число, обозначающее длину целевого типа данных, который допускает указание длины пользователем. Значение по умолчанию — 30.

style
Целочисленное выражение, определяющее, как функция CONVERT преобразует значение аргумента expression. Для значения стиля NULL возвращается NULL. Аргумент data_type определяет диапазон.

Типы возвращаемых данных

Возвращает значение аргумента expression, преобразованное в тип data_type.

Стили даты и времени

Если аргумент expression принадлежит к типу данных даты или времени, аргумент style может иметь одно из значений, приведенных в таблице ниже. Другие значения обрабатываются как 0. Начиная с SQL Server 2012 (11.x), преобразование типов даты и времени в datetimeoffset поддерживается только для стилей 0 и 1. Все другие стили преобразования возвращают ошибку 9809.

Примечание

SQL Server поддерживает формат даты в арабском стиле, используя кувейтский алгоритм.

Без века (гг) (1) С веком (гггг) Standard Ввод/вывод (3)
0 или 100 (1,2) Значение по умолчанию для типа данных datetime и smalldatetime мес дд гггг чч:мм
1 101 США 1 = мм/дд/гг
101 = мм/дд/гггг
2 102 ANSI 2 = гг.мм.дд
102 = гггг.мм.дд
3 103 Британский/французский 3 = дд/мм/гг
103 = дд/мм/гггг
4 104 Немецкий 4 = дд.мм.гг
104 = дд.мм.гггг
5 105 Итальянский 5 = дд-мм-гг
105 = дд-мм-гггг
6 106 (1) 6 = дд мес гг
106 = дд мм гггг
7 107 (1) 7 = Мес дд, гг
107 = Мес дд, гггг
8 или 24 108 чч:мм:сс
9 или 109 (1,2) По умолчанию + миллисекунды мес дд гггг чч:мм:сс:ммм
10 110 США 10 = мм-дд-гг
110 = мм-дд-гггг
11 111 Япония 11 = гг/мм/дд
111 = гггг/мм/дд
12 112 ISO 12 = ггммдд
112 = ггггммдд
13 или 113 (1,2) Европейский по умолчанию + миллисекунды дд мес гггг чч:мм:сс:ммм (24-часовой формат)
14 114 чч:мм:сс:ммм (24-часовой формат)
20 или 120 (2) Канонический формат ODBC гггг-мм-дд чч:мм:сс (24-часовой формат)
21 или 25 или 121 (2) Каноническая форма ODBC (с миллисекундами) является значением по умолчанию для времени, даты, datetime2, и datetimeoffset гггг-мм-дд чч:мм:сс.ммм (24-часовой формат)
22 США мм/дд/гг чч:мм:сс AM (или PM)
23 ISO8601 гггг-мм-дд
126 (4) ISO8601 гггг-мм-ддТчч:мм:сс.ммм (без пробелов)

Примечание. Для равного 0 значения миллисекунд (ммм) значение десятичной части не отображается. Например, значение «2012-11-07T18:26:20.000» отображается как «2012-11-07T18:26:20».

127(6, 7) ISO8601 с часовым поясом П. гггг-ММ-ддTчч:мм:сс.fffZ (без пробелов)

Примечание. Для равного 0 значения миллисекунд (ммм) значение десятичной части не отображается. Например, значение «2012-11-07T18:26:20.000» будет отображаться как «2012-11-07T18:26:20».

130 (1,2) Хиджра (5) дд мес гггг чч:ми:сс:мммAM

В этом стиле мес является представлением Юникода полного названия месяца в Хиджре. Это значение не отображается правильно при установке SSMS языковой версии «Английский (США)» по умолчанию.

131 (2) Хиджра (5) дд/мм/гггг чч:ми:сс:мммAM

1 Эти значения стилей возвращают недетерминированные результаты. Включают в себя все стили «гг» (без номера века) и часть стилей «гггг» (с номером века).

2 Значения по умолчанию (0 или 100, 9 или 109, 13 или 113, 20 или 120, 23 и 21 или 25 или 121) всегда возвращают год с веком (гггг).

3 Вход при преобразовании в тип datetime; выход при преобразовании в символьные данные.

4 Для использования в формате XML. Для преобразования из datetime или smalldatetime в символьные данные формат вывода должен быть таким, как описано в предыдущей таблице.

5 Хиджра — календарная система с несколькими вариантами. В SQL Server используется кувейтский алгоритм.

Важно!

По умолчанию SQL Server интерпретирует двузначные значения года с пороговым значением 2049. Это означает, что SQL Server интерпретирует двухзначное значение года 49 как 2049, а двухзначное значение 50 — как 1950. В большинстве клиентских приложений, основанных, в частности, на объектах автоматизации, 2030  год используется в качестве порогового значения. SQL Server предоставляет параметр настройки двузначного порогового значения года, с помощью которого можно изменить пороговое значение года, используемое в SQL Server. Это позволяет обеспечить согласованную обработку дат. Рекомендуется использовать четырехзначные года.

6 Поддерживается только при приведении символьных данных к типу datetime или smalldatetime. При приведении символьных данных, представляющих только дату или только время, к типам datetime и smalldatetime неуказанное время устанавливается в 00:00:00.000, а неуказанная дата — в 1900-01-01.

7 Необязательный признак часового пояса П используется для упрощения сопоставления XML-значений типа datetime, содержащих сведения о часовом поясе, со значениями SQL Server типа datetime без таких сведений. Признак П указывает на часовой пояс UTC-0. Другие часовые пояса обозначаются смещением в формате ЧЧ:ММ в направлении + или –. Например: 2006-12-12T23:45:12-08:00.

При преобразовании в символьные данные из smalldatetime стили, включающие секунды или миллисекунды, будут содержать нули в соответствующих позициях. При преобразовании из datetime или smalldatetime ненужные части даты можно усекать с помощью типа данных char или varchar соответствующей длины.

При преобразовании в тип данных datetimeoffset из символьных данных со стилем, включающим время, смещение часового пояса добавляется к результату.

Стили данных float и real

Если аргумент expression принадлежит к типу данных float или real, аргумент style может иметь одно из значений, приведенных в таблице ниже. Другие значения обрабатываются как 0.

Значение Выходные данные
0 (по умолчанию) Не более 6 разрядов. По необходимости используется экспоненциальное представление чисел.
1 Всегда 8 разрядов. Всегда используется экспоненциальное представление чисел.
2 Всегда 16 разрядов. Всегда используется экспоненциальное представление чисел.
3 Всегда 17 разрядов. Используется для преобразования без потери данных. При использовании этого стиля каждое отдельное значение типа float или real гарантированно преобразуется в отдельную строку символов.

Применимо к: SQL Server (начиная с SQL Server 2016 (13.x);) и База данных SQL Azure.

126, 128, 129 Включено для совместимости с прежними версиями. В следующих версиях эти значения могут быть исключены.

Стили данных money и smallmoney

Если аргумент expression принадлежит к типу данных money или smallmoney, аргумент style может иметь одно из значений, приведенных в таблице ниже. Другие значения обрабатываются как 0.

Значение Выходные данные
0 (по умолчанию) Без запятых, разделяющих группы разрядов, с двумя цифрами справа от десятичного разделителя.

Пример 4235.98.

1 Запятые, разделяющие группы из трех разрядов слева от десятичного разделителя, с двумя цифрами справа от десятичного разделителя.

Пример 3,510.92.

2 Без запятых, разделяющих группы разрядов, с четырьмя цифрами справа от десятичного разделителя.

Пример 4235.9819.

126 Эквивалентно стилю 2 при преобразовании в char(n) или varchar(n)

Стили данных XML

Если аргумент expression принадлежит к типу данных xml, аргумент style может иметь одно из значений, приведенных в таблице ниже. Другие значения обрабатываются как 0.

Значение Выходные данные
0 (по умолчанию) Использовать синтаксический разбор по умолчанию, при котором незначащие пробельные символы удаляются, а внутренние подмножества DTD не разрешены.

Примечание. При преобразовании в тип данных xmlSQL Server обрабатывает незначащие пробелы не так, как это описано в стандарте XML 1.0. Дополнительные сведения см. в статье Создание экземпляров XML-данных.

1 Сохранять незначащие пробельные символы. Этот параметр стиля задает обработку xml:space по умолчанию в соответствии с поведением xml:space=»preserve» .
2 Использовать ограниченную обработку внутреннего подмножества DTD.

При этом для выполнения операций синтаксического анализа без проверки действительности сервер может пользоваться следующей информацией, предоставляемой внутренним подмножеством DTD.

— Применяются атрибуты по умолчанию.
— Ссылки на внутренние сущности разрешаются и раскрываются.
— Проверяется синтаксическая правильность модели содержимого DTD.

Синтаксический анализатор пропускает внешние подмножества DTD. Также не выполняется оценка объявления XML, чтобы определить, имеет ли атрибут standalone значение yes или no. Вместо этого выполняется анализ экземпляра XML как отдельного документа.

3 Сохранять незначащие пробельные символы и использовать ограниченную обработку внутреннего подмножества DTD.

Стили двоичных данных

Если аргумент expression принадлежит к типу данных binary(n) , char(n) , varbinary(n) или varchar(n) , аргумент style может иметь одно из значений, приведенных в таблице ниже. При использовании значений стиля, отсутствующих в этой таблице, возвращается ошибка.

Значение Выходные данные
0 (по умолчанию) Преобразует символы ASCII в двоичные байты либо двоичные байты в символы ASCII. Каждый символ или байт преобразуется в соотношении 1:1.

Если параметр data_type имеет значение binary, к результату слева добавляются символы 0x.

1, 2 Если параметр data_type имеет значение binary, выражение должно быть символьным. Значение аргумента expression должно состоять из четного числа шестнадцатеричных знаков (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f). Если аргумент style имеет значение 1, в качестве первых двух символов выражения обязательно использовать 0x. Если выражение содержит нечетное число символов или использованы недопустимые символы, возникает ошибка.

Если длина преобразованного выражения превышает длину типа данных data_type, результат усекается справа.

При использовании значений аргумента data_type фиксированной длины, превышающей длину преобразованного результата, к результату справа добавляются нули.

Аргумент data_type символьного типа требует двоичного выражения. Каждый двоичный символ преобразуется в два шестнадцатеричных символа. Предположим, длина преобразованного выражения превышает длину типа данных data_type. В этом случае оно усекается.

Если для параметра data_type используется значение символьного типа фиксированного размера и длина преобразованного результата меньше длины типа данных data_type, к преобразованному выражению справа добавляются символы пробела, чтобы сохранить четность числа шестнадцатеричных знаков.

Символы 0x не добавляются слева к преобразованному результату для параметра style, равного 2.

Неявные преобразования

Для неявных преобразований не требуется указывать функции CAST или CONVERT. Для явных преобразований указывать функции CAST или CONVERT необходимо. На следующей иллюстрации показаны все явные и неявные преобразования типов данных, допустимые для системных типов данных SQL Server. Это могут быть типы bigint, sql_variant и xml. При присваивании неявного преобразования из типа sql_variant не происходит, но неявное преобразование в тип sql_variant производится.

Таблица преобразования типов данных

На приведенной выше диаграмме показаны все явные и неявные преобразования, которые допускаются в SQL Server, однако результирующий тип данных преобразования зависит от выполняемой операции.

  • При явных преобразованиях сам оператор определяет результирующий тип данных.
  • При неявных преобразованиях операторы назначения, такие как установка значения переменной или вставка значения в столбец, дают в результате тип данных, определенный в объявлении переменной или в определении столбца.
  • Для операторов сравнения или других выражений результирующий тип данных зависит от правил приоритета типов данных.

При преобразованиях между типом datetimeoffset и символьными типами char, nchar, nvarchar и varchar преобразованная часть смещения часового пояса должна иметь по два разряда для часов и минут. Пример: -08:00.

Примечание

Так как у данных в Юникоде всегда четное число байтов, будьте осторожны при преобразовании значений типа binary или varbinary в типы данных, поддерживающие Юникод, и наоборот. Например, при следующем преобразовании не будет возвращено шестнадцатеричное значение 41. В данном случае будет получено шестнадцатеричное значение 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary). Дополнительные сведения см. в статье Collation and Unicode Support.

Типы данных больших значений

Типы данных большого объема демонстрируют то же поведение при явных и неявных преобразованиях, что и их аналоги меньшего объема, а именно типы данных nvarchar, varbinary и varchar. Тем не менее необходимо учитывать следующие правила:

  • Преобразование из image в varbinary(max) и обратно неявное, как и преобразования между text и varchar(max) , а также ntext и nvarchar(max) .
  • Преобразование из типов данных большого объема, например varchar(max) , в аналогичный тип данных меньшего объема, например varchar, неявное, но если объем данных слишком велик, будет произведено усечение данных до указанной длины конкретного типа данных меньшего объема.
  • Преобразование из nvarchar, varbinary или varchar в соответствующие им типы данных большого объема выполняется неявно.
  • Преобразование из типа данных sql_variant в типы данных большого объема выполняется явно.
  • Типы данных большого объема не могут быть преобразованы в тип данных sql_variant.

Дополнительные сведения о преобразовании из типа данных xml см. в разделе Создание экземпляров XML-данных.

Тип данных XML

При явном или неявном приведении типа данных xml к строковому или двоичному типу данных содержимое типа данных xml сериализуется согласно набору определенных правил. Сведения об этих правилах см. в разделе Определение сериализации XML-данных. Дополнительные сведения о преобразовании других типов данных в тип данных xml см. в разделе Создание экземпляров XML-данных.

Типы данных text и image

Для типов данных text и image автоматическое преобразование типов не поддерживается. Можно явно преобразовать text в символьные данные, а image — в binary или varbinary, но длиной не более 8000 байт. Если вы попробуете произвести неверное преобразование, например преобразовать символьное выражение, содержащее буквы, в int, SQL Server вернет ошибку.

Параметры сортировки выходных данных

Если входные и выходные данные функций CAST и CONVERT представляют собой символьные строки, у выходных данных будут те же параметры сортировки, что и у входных. Если входные данные не символьная строка, выходным назначаются параметры сортировки по умолчанию для этой базы данных и присваивается метка о том, что этот режим используется принудительно. Дополнительные сведения см. в статье Очередность параметров сортировки (Transact-SQL).

Чтобы назначить выходным данным другие параметры сортировки, примените предложение COLLATE к результирующему выражению функции CAST или CONVERT. Пример:

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

Усечение и округление результатов

При преобразовании символьных или двоичных выражений (binary, char, nchar, nvarchar, varbinary или varchar) в выражение другого типа данных операция преобразования может усекать выходные данные, отображать их лишь частично или возвращать ошибку. Это происходит в тех случаях, когда результат имеет слишком малую длину для отображения. Результаты преобразований в binary, char, nchar, nvarchar, varbinary или varchar усекаются всегда, за исключением случаев, перечисленных в таблице ниже.

Из типа данных В тип данных Результат
int, smallint или tinyint char *
varchar *
nchar E
nvarchar E
money, smallmoney, numeric, decimal, float или real char E
varchar E
nchar E
nvarchar E

* = результат слишком мал для отображения.

О = ошибка, так как длина результата слишком мала для отображения.

SQL Server гарантирует получение одинаковых результатов в разных версиях только для обратимых преобразований, то есть таких, когда данные преобразуются из исходного типа данных, а затем опять в него. В следующем примере показано обратимое преобразование:

DECLARE @myval DECIMAL (5, 2);  
SET @myval = 193.57;  
SELECT CAST(CAST(@myval AS VARBINARY(20)) AS DECIMAL(10,5));  
-- Or, using CONVERT  
SELECT CONVERT(DECIMAL(10,5), CONVERT(VARBINARY(20), @myval));  

Предупреждение

Не пытайтесь составлять данные типа binary, а затем преобразовывать их в данные категории числового типа. SQL Server не гарантирует, что результат преобразования типа данных decimal или numeric в binary будет одинаковым в разных версиях SQL Server.

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

USE AdventureWorks2012;  
GO  
SELECT p.FirstName, p.LastName, SUBSTRING(p.Title, 1, 25) AS Title,
    CAST(e.SickLeaveHours AS char(1)) AS [Sick Leave]  
FROM HumanResources.Employee e JOIN Person.Person p 
    ON e.BusinessEntityID = p.BusinessEntityID  
WHERE NOT e.BusinessEntityID > 5;  

Результирующий набор:

FirstName   LastName      Title   Sick Leave
---------   ------------- ------- --------`
Ken         Sanchez       NULL   *
Terri       Duffy         NULL   *
Roberto     Tamburello    NULL   *
Rob         Walters       NULL   *
Gail        Erickson      Ms.    *

(5 row(s) affected)  

При преобразовании между типами данных с разными длинами дробных частей SQL Server может усекать или округлять результат. В следующей таблице описано это поведение.

От Чтобы Поведение
numeric numeric Round
numeric int Truncate
numeric money Round
money int Round
money numeric Round
float int Truncate
float numeric Round

Точность преобразования значений float, которые используют экспоненциальное представление, в decimal или numeric ограничена только 17 знаками. Любое значение с точностью, превышающей 17 знаков, округляется до нуля.

float datetime Round
datetime int Round

Например, значения 10,6496 и –10,6496 могут усекаться или округляться при преобразовании в тип int или numeric:

SELECT  CAST(10.6496 AS INT) as trunc1,
        CAST(-10.6496 AS INT) as trunc2,
        CAST(10.6496 AS NUMERIC) as round1,
        CAST(-10.6496 AS NUMERIC) as round2;

Результаты запроса показаны в приведенной ниже таблице.

trunc1 trunc2 round1 round2
10 –10 11 -11

При преобразовании к типам данных, у которых дробная часть короче, чем у исходного типа, значение округляется. Например, это преобразование возвращает $10.3497:

SELECT CAST(10.3496847 AS money);

SQL Server возвращает сообщение об ошибке при попытке преобразовать нечисловые данные типа char, nchar, nvarchar или varchar в тип decimal, float, int или numeric. SQL Server также возвращает сообщение об ошибке при попытке преобразования пустой строки (» «) в тип numeric или decimal.

Некоторые преобразования типа данных даты и времени являются недетерминированными

В следующих стилях преобразование строк в тип datetime недетерминировано:

  • Все стили меньше 1001
  • 106
  • 107
  • 109
  • 113
  • 130

1 За исключением стилей 20 и 21.

Дополнительные сведения см. в статье Недетерминированное преобразование строк дат литералов в значения DATE.

Дополнительные символы (суррогатные пары)

Начиная с SQL Server 2012 (11.x) при использовании параметров сортировки дополнительных символов (SC) операция CAST из типа nchar или nvarchar в тип nchar или nvarchar с меньшей длиной не будет выполнять усечение внутри суррогатной пары. Вместо этого усечение происходит перед дополнительным символом. Например, выполнение следующего фрагмента кода приведет к тому, что в @x останется лишь 'ab'. Места недостаточно для размещения дополнительного символа.

DECLARE @x NVARCHAR(10) = 'ab' + NCHAR(0x10000);  
SELECT CAST (@x AS NVARCHAR(3));  

При использовании параметров сортировки SC поведение CONVERT аналогично CAST. Дополнительные сведения см. в статье Поддержка параметров сортировки и Юникода — дополнительные символы.

Поддержка совместимости

В предыдущих версиях SQL Server используемый по умолчанию стиль для операций CAST и CONVERT с типами данных time и datetime2 — 121, кроме случая, когда любой из типов используется в выражении вычисляемого столбца. Для вычисляемых столбцов используемый по умолчанию стиль — 0. Это поведение влияет на вычисляемые столбцы при их создании и использовании в запросах с автоматической параметризацией, а также при использовании в определениях ограничений.

При уровне совместимости 110 и выше стиль по умолчанию для операций CAST и CONVERT с типами данных time и datetime2 всегда имеет значение 121. Если запрос основан на прежнем поведении, следует использовать уровень совместимости ниже 110 либо явно задать в затрагиваемом запросе стиль 0.

Значение уровня совместимости Стиль по умолчанию для операций CAST и CONVERT1 Стиль по умолчанию для вычисляемого столбца
< 110 121 0
> = 110 121 121

1 Кроме вычисляемых столбцов

Обновление базы данных до уровня совместимости 110 и выше не приведет к изменению пользовательских данных, сохраненных на диске. Следует исправить эти данных соответствующим образом вручную. Например, если бы вы использовали предложение SELECT INTO для создания таблицы на основе источника, содержащего описанное выше выражение вычисляемого столбца, то сохранялись бы данные (благодаря стилю 0), а не само определение вычисляемого столбца. В таком случае необходимо вручную обновлять эти данные в соответствии со стилем 121.

Примеры

A. Использование функций CAST и CONVERT

В этих примерах получаются имена продуктов, у которых первая цифра цены — 3, для чего их значения ListPrice преобразовываются к int.

-- Use CAST  
USE AdventureWorks2012;  
GO  
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice  
FROM Production.Product  
WHERE CAST(ListPrice AS int) LIKE '33%';  
GO  
  
-- Use CONVERT.  
USE AdventureWorks2012;  
GO  
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice  
FROM Production.Product  
WHERE CONVERT(int, ListPrice) LIKE '33%';  
GO  

Результирующий набор: Образец результирующего набора одинаков для операций CAST и CONVERT.

ProductName                    ListPrice
------------------------------ ---------------------
LL Road Frame - Black, 58      337.22
LL Road Frame - Black, 60      337.22
LL Road Frame - Black, 62      337.22
LL Road Frame - Red, 44        337.22
LL Road Frame - Red, 48        337.22
LL Road Frame - Red, 52        337.22
LL Road Frame - Red, 58        337.22
LL Road Frame - Red, 60        337.22
LL Road Frame - Red, 62        337.22
LL Road Frame - Black, 44      337.22
LL Road Frame - Black, 48      337.22
LL Road Frame - Black, 52      337.22
Mountain-100 Black, 38         3374.99
Mountain-100 Black, 42         3374.99
Mountain-100 Black, 44         3374.99
Mountain-100 Black, 48         3374.99
HL Road Front Wheel            330.06
LL Touring Frame - Yellow, 62  333.42
LL Touring Frame - Blue, 50    333.42
LL Touring Frame - Blue, 54    333.42
LL Touring Frame - Blue, 58    333.42
LL Touring Frame - Blue, 62    333.42
LL Touring Frame - Yellow, 44  333.42
LL Touring Frame - Yellow, 50  333.42
LL Touring Frame - Yellow, 54  333.42
LL Touring Frame - Yellow, 58  333.42
LL Touring Frame - Blue, 44    333.42
HL Road Tire                   32.60

(28 rows affected)

Б. Использование функции CAST с арифметическими операторами

В этом примере вычисляется столбец значений (Computed) путем деления суммарных продаж за год (SalesYTD) на проценты комиссионных (CommissionPCT). Это значение округляется до ближайшего целого числа, после чего с помощью функции CAST приводится к типу данных int.

USE AdventureWorks2012;  
GO  
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS INT) AS Computed  
FROM Sales.SalesPerson   
WHERE CommissionPCT != 0;  
GO  

Результирующий набор:

Computed
------
379753754
346698349
257144242
176493899
281101272
0  
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107

(14 row(s) affected)  

В. Использование функции CAST для объединения строк

В этом примере несимвольные выражения сцепляются с помощью функции CAST. В этом примере используется база данных AdventureWorksDW.

SELECT 'The list price is ' + CAST(ListPrice AS VARCHAR(12)) AS ListPrice  
FROM dbo.DimProduct  
WHERE ListPrice BETWEEN 350.00 AND 400.00;  

Результирующий набор:

ListPrice
------------------------
The list price is 357.06
The list price is 364.09
The list price is 364.09
The list price is 364.09
The list price is 364.09  

Г. Использование функции CAST для получения удобочитаемого текста

В этом примере функция CAST используется в списке SELECT для преобразования значений столбца Name к значениям типа char(10) . В этом примере используется база данных AdventureWorksDW.

SELECT DISTINCT CAST(EnglishProductName AS CHAR(10)) AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE EnglishProductName LIKE 'Long-Sleeve Logo Jersey, M';  

Результирующий набор:

Name        ListPrice
----------  ---------
Long-Sleev  31.2437
Long-Sleev  32.4935
Long-Sleev  49.99  

Д. Использование функции CAST с предложением LIKE

В этом примере значения SalesYTD столбца money преобразуются в тип данных int, после чего преобразуются в тип данных char(20), что позволяет использовать их в предложении LIKE.

USE AdventureWorks2012;  
GO  
SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID  
FROM Person.Person AS p   
JOIN Sales.SalesPerson AS s   
    ON p.BusinessEntityID = s.BusinessEntityID  
WHERE CAST(CAST(s.SalesYTD AS INT) AS char(20)) LIKE '2%';  
GO  

Результирующий набор:

FirstName        LastName            SalesYTD         BusinessEntityID
---------------- ------------------- ---------------- -------------
Tsvi             Reiter              2811012.7151      279
Syed             Abbas               219088.8836       288
Rachel           Valdez              2241204.0424      289

(3 row(s) affected)  

Е. Использование функции CONVERT или CAST с типизированным XML

В этих примерах показано использование функции CONVERT для преобразования данных в типизированный XML-код с помощью столбцов и типа данных XML (SQL Server).

В этом примере строка, содержащая пробельные символы, текст и разметку, преобразуется в типизированный XML, в котором удаляются все незначащие пробельные символы (пробелы, разделяющие узлы):

SELECT CONVERT(XML, '<root><child/></root>')  

В этом примере похожая строка, содержащая пробельные символы, текст и разметку, преобразуется в типизированный XML, в котором сохраняются все незначащие пробельные символы (пробелы, разделяющие узлы):

SELECT CONVERT(XML, '<root>          <child/>         </root>', 1)  

В этом примере строка, содержащая пробельные символы, текст и разметку, приводится к типизированному XML:

SELECT CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)  

Дополнительные примеры см. в статье Создание экземпляров XML-данных.

Ж. Использование функций CAST и CONVERT с данными типа datetime

Начиная со значений GETDATE() этот пример показывает текущие дату и время, использует функцию CAST для изменения текущей даты и времени в символьный тип данных и затем использует CONVERT для отображения даты и времени в формате ISO 8601.

SELECT   
   GETDATE() AS UnconvertedDateTime,  
   CAST(GETDATE() AS NVARCHAR(30)) AS UsingCast,  
   CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;  
GO  

Результирующий набор:

UnconvertedDateTime     UsingCast              UsingConvertTo_ISO8601
----------------------- ---------------------- ------------------------------
2006-04-18 09:58:04.570 Apr 18 2006  9:58AM    2006-04-18T09:58:04.570

(1 row(s) affected)  

Этот пример — частичная противоположность предыдущему примеру. Этот пример отображает дату и время в виде символьных данных, использует функцию CAST для изменения символьных данных в тип данных datetime, а затем функцию CONVERT для изменения символьных данных в тип данных datetime.

SELECT   
   '2006-04-25T15:50:59.997' AS UnconvertedText,  
   CAST('2006-04-25T15:50:59.997' AS datetime) AS UsingCast,  
   CONVERT(datetime, '2006-04-25T15:50:59.997', 126) AS UsingConvertFrom_ISO8601 ;  
GO  

Результирующий набор:

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2006-04-25T15:50:59.997 2006-04-25 15:50:59.997 2006-04-25 15:50:59.997

(1 row(s) affected)  

З. Использование функции CONVERT с двоичными и символьными данными

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

--Convert the binary value 0x4E616d65 to a character value.  
SELECT CONVERT(CHAR(8), 0x4E616d65, 0) AS [Style 0, binary to character];  

Результирующий набор:

Style 0, binary to character
----------------------------
Name  

(1 row(s) affected)  

В этом примере показано, что стиль 1 может привести к принудительному усечению результата. К этому приводит наличие символов 0x в результате.

SELECT CONVERT(CHAR(8), 0x4E616d65, 1) AS [Style 1, binary to character];  

Результирующий набор:

Style 1, binary to character
------------------------------
0x4E616D

(1 row(s) affected)  

В этом примере показано, что стиль 2 не вызывает усечение результата, так как символы 0x не включены в результат.

SELECT CONVERT(CHAR(8), 0x4E616d65, 2) AS [Style 2, binary to character];  

Результирующий набор:

Style 2, binary to character
------------------------------
4E616D65

(1 row(s) affected)  

Преобразуйте символьное значение «Name» в двоичное значение.

SELECT CONVERT(BINARY(8), 'Name', 0) AS [Style 0, character to binary];  

Результирующий набор:

Style 0, character to binary
----------------------------
0x4E616D6500000000

(1 row(s) affected)  
SELECT CONVERT(BINARY(4), '0x4E616D65', 1) AS [Style 1, character to binary];  

Результирующий набор:

Style 1, character to binary
---------------------------- 
0x4E616D65

(1 row(s) affected)  
SELECT CONVERT(BINARY(4), '4E616D65', 2) AS [Style 2, character to binary];  

Результирующий набор:

Style 2, character to binary  
----------------------------------  
0x4E616D65

(1 row(s) affected)  

И. Конвертирование типов данных даты и времени

Этот пример демонстрирует преобразование типов данных date, time и datetime.

DECLARE @d1 DATE, @t1 TIME, @dt1 DATETIME;  
SET @d1 = GETDATE();  
SET @t1 = GETDATE();  
SET @dt1 = GETDATE();  
SET @d1 = GETDATE();  
-- When converting date to datetime the minutes portion becomes zero.  
SELECT @d1 AS [DATE], CAST (@d1 AS DATETIME) AS [date as datetime];  
-- When converting time to datetime the date portion becomes zero   
-- which converts to January 1, 1900.  
SELECT @t1 AS [TIME], CAST (@t1 AS DATETIME) AS [time as datetime];  
-- When converting datetime to date or time non-applicable portion is dropped.  
SELECT @dt1 AS [DATETIME], CAST (@dt1 AS DATE) AS [datetime as date], 
   CAST (@dt1 AS TIME) AS [datetime as time];  

К. Использование функции CONVERT с данными типа datetime в разных форматах

Начиная со значений GETDATE() этот пример использует функцию CONVERT для отображения всех стилей даты и времени в разделе Стили даты и времени этой статьи.

Номер формата Пример запроса Пример результата
0 SELECT CONVERT(NVARCHAR, GETDATE(), 0) Авг 23 2019 1:39PM
1 SELECT CONVERT(NVARCHAR, GETDATE(), 1) 08/23/19
2 SELECT CONVERT(NVARCHAR, GETDATE(), 2) 19.08.23
3 SELECT CONVERT(NVARCHAR, GETDATE(), 3) 23/08/19
4 SELECT CONVERT(NVARCHAR, GETDATE(), 4) 23.08.19
5 SELECT CONVERT(NVARCHAR, GETDATE(), 5) 23-08-19
6 SELECT CONVERT(NVARCHAR, GETDATE(), 6) 23 авг 19
7 SELECT CONVERT(NVARCHAR, GETDATE(), 7) Авг 23, 19
8 или 24 или 108 SELECT CONVERT(NVARCHAR, GETDATE(), 8) 13:39:17
9 или 109 SELECT CONVERT(NVARCHAR, GETDATE(), 9) Авг 23 2019 1:39:17:090PM
10 SELECT CONVERT(NVARCHAR, GETDATE(), 10) 08-23-19
11 SELECT CONVERT(NVARCHAR, GETDATE(), 11) 19/08/23
12 SELECT CONVERT(NVARCHAR, GETDATE(), 12) 190823
13 или 113 SELECT CONVERT(NVARCHAR, GETDATE(), 13) 23 авг 2019 13:39:17:090
14 или 114 SELECT CONVERT(NVARCHAR, GETDATE(), 14) 13:39:17:090
20 или 120 SELECT CONVERT(NVARCHAR, GETDATE(), 20) 2019-08-23 13:39:17
21 или 25 или 121 SELECT CONVERT(NVARCHAR, GETDATE(), 21) 2019-08-23 13:39:17.090
22 SELECT CONVERT(NVARCHAR, GETDATE(), 22) 08/23/19 1:39:17 PM
23 SELECT CONVERT(NVARCHAR, GETDATE(), 23) 2019-08-23
101 SELECT CONVERT(NVARCHAR, GETDATE(), 101) 08/23/2019
102 SELECT CONVERT(NVARCHAR, GETDATE(), 102) 2019.08.23
103 SELECT CONVERT(NVARCHAR, GETDATE(), 103) 23/08/2019
104 SELECT CONVERT(NVARCHAR, GETDATE(), 104) 23.08.2019
105 SELECT CONVERT(NVARCHAR, GETDATE(), 105) 23-08-2019
106 SELECT CONVERT(NVARCHAR, GETDATE(), 106) 23 авг 2019
107 SELECT CONVERT(NVARCHAR, GETDATE(), 107) Авг 23, 2019
110 SELECT CONVERT(NVARCHAR, GETDATE(), 110) 08-23-2019
111 SELECT CONVERT(NVARCHAR, GETDATE(), 111) 2019/08/23
112 SELECT CONVERT(NVARCHAR, GETDATE(), 112) 20190823
113 SELECT CONVERT(NVARCHAR, GETDATE(), 113) 23 авг 2019 13:39:17.090
120 SELECT CONVERT(NVARCHAR, GETDATE(), 120) 2019-08-23 13:39:17
121 SELECT CONVERT(NVARCHAR, GETDATE(), 121) 2019-08-23 13:39:17.090
126 SELECT CONVERT(NVARCHAR, GETDATE(), 126) 2019-08-23T13:39:17.09
127 SELECT CONVERT(NVARCHAR, GETDATE(), 127) 2019-08-23T13:39:17.09
130 SELECT CONVERT(NVARCHAR, GETDATE(), 130) 22 ذو الحجة 1440 1:39:17.090P
131 SELECT CONVERT(NVARCHAR, GETDATE(), 131) 22/12/1440 1:39:17.090PM

K. Результат применения приоритета типов данных при допустимых преобразованиях

В приведенном ниже примере определяется переменная типа VARCHAR, ей присваивается значение, а затем выбирается объединение переменной со строкой.

DECLARE @string VARCHAR(10);
SET @string = 1;
SELECT @string + ' is a string.' AS Result

Результирующий набор:

Result
-----------------------
1 is a string.

Значение 1 типа int было преобразовано в тип VARCHAR.

В этом примере показан похожий запрос с переменной типа int:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + ' is not a string.' AS Result

В этом случае инструкция SELECT выдает следующую ошибку:

Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value ' is not a string.' to data type int.

Чтобы вычислить выражение @notastring + ' is not a string.', SQL Server необходимо следовать правилам приоритета типов данных для выполнения неявного преобразования перед вычислением результата выражения. Так как int имеет более высокий приоритет, чем VARCHAR, SQL Server пытается преобразовать строку в целое число, и операция завершается ошибкой, так как эта строка не может быть преобразована в целое число.

Если предоставить строку, которую можно преобразовать, инструкция завершается успешно, как показано в следующем примере:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + '1'

В этом случае строка '1' может быть преобразована в целочисленное значение 1, поэтому инструкция SELECT возвращает значение 2. Если предоставленные типы данных являются целочисленными, оператор + становится математическим оператором сложения, а не объединения строк.

Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)

М. Использование функций CAST и CONVERT

В этом примере извлекаются имена продуктов, у которых первая цифра цены — 3, а затем их значения ListPrice преобразовываются в int. В нем используется база данных AdventureWorksDW2016.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(ListPrice AS int) LIKE '3%';  

В этом примере показан тот же запрос, в котором вместо функции CAST используется CONVERT. В нем используется база данных AdventureWorksDW2016.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CONVERT(INT, ListPrice) LIKE '3%';  

Н. Использование функции CAST с арифметическими операторами

В этом примере вычисляется отдельное значение столбца путем деления цены единицы товара (UnitPrice) на процент скидки (UnitPriceDiscountPct). После округления до ближайшего целого числа результат преобразуется к типу данных int. В этом примере используется база данных AdventureWorksDW2016.

SELECT ProductKey, UnitPrice,UnitPriceDiscountPct,  
       CAST(ROUND (UnitPrice*UnitPriceDiscountPct,0) AS int) AS DiscountPrice  
FROM dbo.FactResellerSales  
WHERE SalesOrderNumber = 'SO47355'   
      AND UnitPriceDiscountPct > .02;  

Результирующий набор:

ProductKey  UnitPrice  UnitPriceDiscountPct  DiscountPrice
----------  ---------  --------------------  -------------
323         430.6445   0.05                  22
213         18.5043    0.05                  1
456         37.4950    0.10                  4
456         37.4950    0.10                  4
216         18.5043    0.05                  1  

О. Использование функции CAST с предложением LIKE

В этом примере столбец ListPrice типа money преобразуется в тип int, а затем в тип char(20) так, чтобы его можно было использовать в предложении LIKE. В этом примере используется база данных AdventureWorksDW2016.

SELECT EnglishProductName AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(CAST(ListPrice AS INT) AS CHAR(20)) LIKE '2%';  

П. Использование функций CAST и CONVERT с данными типа datetime

В этом примере отображаются текущие дата и время, используется функция CAST для преобразования текущей даты и времени в символьный тип данных, а затем функция CONVERT для отображения даты и времени в формате ISO 8601. В этом примере используется база данных AdventureWorksDW2016.

SELECT TOP(1)  
   SYSDATETIME() AS UnconvertedDateTime,  
   CAST(SYSDATETIME() AS NVARCHAR(30)) AS UsingCast,  
   CONVERT(NVARCHAR(30), SYSDATETIME(), 126) AS UsingConvertTo_ISO8601  
FROM dbo.DimCustomer;  

Результирующий набор:

UnconvertedDateTime     UsingCast                     UsingConvertTo_ISO8601  
---------------------   ---------------------------   ---------------------------  
07/20/2010 1:44:31 PM   2010-07-20 13:44:31.5879025   2010-07-20T13:44:31.5879025  

Этот пример — частичная противоположность предыдущему примеру. В этом примере отображаются дата и время в виде символьных данных, используется функция CAST для преобразования символьных данных в тип datetime, а затем функция CONVERT для преобразования символьных данных в тип datetime. В этом примере используется база данных AdventureWorksDW2016.

SELECT TOP(1)   
   '2010-07-25T13:50:38.544' AS UnconvertedText,  
CAST('2010-07-25T13:50:38.544' AS DATETIME) AS UsingCast,  
   CONVERT(DATETIME, '2010-07-25T13:50:38.544', 126) AS UsingConvertFrom_ISO8601  
FROM dbo.DimCustomer;  

Результирующий набор:

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2010-07-25T13:50:38.544 07/25/2010 1:50:38 PM   07/25/2010 1:50:38 PM  

См. также раздел

Приоритет типов данных (Transact-SQL)
Преобразование типов данных (ядро СУБД)
FORMAT (Transact-SQL)
STR (Transact-SQL)
SELECT (Transact-SQL)
Системные функции (Transact-SQL)
Поддержка параметров сортировки и Юникода
Написание инструкций Transact-SQL, адаптированных к международному использованию

  • Составить рассказ об одном из слов используя приведенные сведения
  • Составить рассказ осень в саду
  • Составить рассказ один день из жизни крестьянина при правлении петра 1
  • Составить рассказ осень в лесу
  • Составить рассказ один день из жизни горожанина