Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak CAST() działa w SQL Server

W SQL Server, CAST() funkcja konwertuje wyrażenie jednego typu danych na inny.

Oto krótki przegląd funkcji z przykładami.

Składnia

Składnia wygląda tak:

CAST ( expression AS data_type [ ( length ) ] )  

Gdzie expression jest wyrażeniem do konwersji, data_type to nowy typ danych, a length to opcjonalna długość dla nowego typu danych.

Przykład

Oto przykład rzutowania łańcucha jako dziesiętnego:

SELECT CAST('007' AS DECIMAL(5,2));

Wynik:

7.00

Ciąg do daty

Oto przykład rzutowania ciągu na datę:

SELECT CAST('09 Feb 2030' AS date);

Wynik:

2030-02-09

W tym przypadku CAST() funkcja była w stanie określić, które części daty są które, ponieważ podałem datę w formacie, który rozpoznaje.

Przekazanie wartości, której nie można rzutować jako daty, powoduje błąd:

SELECT CAST('Next Xmas' AS date);

Wynik:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

Lokal

Język bieżącej sesji może mieć wpływ na interpretację dat.

Oto, co dzieje się podczas używania języka brytyjskiego:

SET LANGUAGE British;
SELECT CAST('09/02/2030' AS date);

Wynik:

2030-02-09

W tym przypadku data została zinterpretowana jako dziewiąty dzień lutego.

Zmieńmy język na us_English :

SET LANGUAGE us_English;
SELECT CAST('09/02/2030' AS date);

Wynik:

2030-09-02

Tym razem zinterpretował datę jako drugi dzień września.

Konkatenacja ciągów

Oto przykład rzutowania wartości liczbowej na łańcuch w celu połączenia wartości z łańcuchem:

SELECT 'Likes: ' + CAST(178 AS VARCHAR(10));

Wynik:

Likes: 178

Oto, co się stanie, jeśli go nie przerzucimy:

SELECT 'Likes: ' + 178;

Wynik:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Likes: ' to data type int.

Próbując połączyć dwie wartości z różnymi typami danych, SQL Server musi niejawnie przekonwertować jedną z wartości, aby używała typu danych drugiej, tak aby obie miały ten sam typ danych, zanim będzie mógł wykonać połączenie. Konwersja odbywa się zgodnie z regułami pierwszeństwa typu danych.

W SQL Server INT typ danych ma wyższy priorytet niż VARCHAR .

Dlatego w powyższym przykładzie SQL Server próbuje przekonwertować ciąg na liczbę całkowitą. Ale to się nie udaje, ponieważ łańcuch nie może zostać przekonwertowany na liczbę całkowitą.

Obcinanie tekstu

Jedna poręczna sztuczka, którą możemy wykonać za pomocą CAST() Funkcja polega na obcinaniu dłuższych łańcuchów do bardziej czytelnej długości.

Oto przykład obcinania tekstu wybranego z tabeli bazy danych:

SELECT
    ProductName,
    CAST(ProductName AS VARCHAR(20)) AS Truncated
FROM Products;

Wynik:

+---------------------------------+----------------------+
| ProductName                     | Truncated            |
|---------------------------------+----------------------|
| Left handed screwdriver         | Left handed screwdri |
| Long Weight (blue)              | Long Weight (blue)   |
| Long Weight (green)             | Long Weight (green)  |
| Sledge Hammer                   | Sledge Hammer        |
| Chainsaw                        | Chainsaw             |
| Straw Dog Box                   | Straw Dog Box        |
| Bottomless Coffee Mugs (4 Pack) | Bottomless Coffee Mu |
| Right handed screwdriver        | Right handed screwdr |
+---------------------------------+----------------------+

Więcej informacji

CAST() funkcja działa podobnie do CONVERT() funkcji, a wiele konwersji danych można wykonać za pomocą jednej z nich. To powiedziawszy, istnieją między nimi różnice.

Zobacz dokumentację Microsoft dla CAST() i CONVERT() aby uzyskać bardziej szczegółowe informacje na temat korzystania z tej funkcji.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj float na varchar w SQL Server bez notacji naukowej

  2. Zmień domyślny format daty i godziny w pojedynczej bazie danych w SQL Server

  3. Naruszenie ograniczenia UNIQUE KEY na INSERT WHERE COUNT(*) =0 w SQL Server 2005

  4. SQL :in klauzula w procedurze składowanej:jak przekazywać wartości

  5. Monitorowanie bazy danych SQL Server TempDB przy użyciu widoków zarządzania dynamicznego (DMV)