Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में डेटा प्रकार वरीयता

नीचे वरीयता क्रम में SQL सर्वर डेटा प्रकारों वाली एक सूची है।

  1. उपयोगकर्ता-परिभाषित डेटा प्रकार (उच्चतम)
  2. sql_variant
  3. xml
  4. datetimeoffset
  5. datetime2
  6. datetime
  7. smalldatetime
  8. date
  9. time
  10. float
  11. real
  12. decimal
  13. money
  14. smallmoney
  15. bigint
  16. int
  17. smallint
  18. tinyint
  19. bit
  20. ntext
  21. text
  22. image
  23. timestamp
  24. uniqueidentifier
  25. nvarchar (nvarchar(max) . सहित )
  26. nchar
  27. varchar (varchar(max) . सहित) )
  28. char
  29. varbinary (varbinary(max) . सहित )
  30. binary (सबसे कम)

जब आप विभिन्न डेटा प्रकारों के ऑपरेंड को संयोजित करने के लिए एक ऑपरेटर का उपयोग करते हैं, तो निम्न प्राथमिकता वाले डेटा प्रकार को पहले उच्च प्राथमिकता वाले डेटा प्रकार में परिवर्तित किया जाता है।

यदि रूपांतरण समर्थित अंतर्निहित रूपांतरण नहीं है, तो एक त्रुटि लौटा दी जाती है।

यदि दोनों ऑपरेंड एक ही प्रकार के हैं, तो कोई रूपांतरण नहीं किया जाता है (या आवश्यक) और ऑपरेशन का परिणाम ऑपरेंड के डेटा प्रकार का उपयोग करता है।

उदाहरण

यहां एक निहित रूपांतरण का एक उदाहरण दिया गया है जो सफल होता है:

SELECT 1 * 1.00;

परिणाम:

1.00

यहां, बाएं ऑपरेंड को दाएं ऑपरेंड के डेटा प्रकार में बदल दिया गया था।

इसे करने का एक और स्पष्ट तरीका यहां दिया गया है:

DECLARE 
    @n1 INT, 
    @n2 DECIMAL(5, 2);
SET @n1 = 1;
SET @n2 = 1;
SELECT @n1 * @n2;

परिणाम:

1.00

इस मामले में मैंने स्पष्ट रूप से बाएं ऑपरेंड को INT . के रूप में घोषित किया है और दायां संकार्य DECIMAL(5, 2) . के रूप में ।

हम sys.dm_exec_describe_first_result_set के साथ परिणामों की और जांच कर सकते हैं प्रणाली गतिशील प्रबंधन समारोह।

यह फ़ंक्शन हमें क्वेरी में लौटाए गए प्रत्येक कॉलम के डेटा प्रकार की जांच करने में सक्षम बनाता है:

SELECT 
    system_type_name,
    max_length,
    [precision],
    scale
FROM sys.dm_exec_describe_first_result_set(
    'DECLARE @n1 INT, @n2 DECIMAL(5, 2);
SET @n1 = 1;
SET @n2 = 1;
SELECT @n1, @n2, @n1 * @n2;', 
    null, 
    0);

परिणाम:

+--------------------+--------------+-------------+---------+
| system_type_name   | max_length   | precision   | scale   |
|--------------------+--------------+-------------+---------|
| int                | 4            | 10          | 0       |
| decimal(5,2)       | 5            | 5           | 2       |
| decimal(16,2)      | 9            | 16          | 2       |
+--------------------+--------------+-------------+---------+

यहां, हम देख सकते हैं कि प्रत्येक पंक्ति क्वेरी द्वारा लौटाए गए प्रत्येक कॉलम का प्रतिनिधित्व करती है। इसलिए, पहला कॉलम एक INT था , दूसरा कॉलम था DECIMAL(5,2) , और तीसरा कॉलम DECIMAL(16,2)

तो SQL सर्वर ने वास्तव में एक DECIMAL(16,2) लौटाया , भले ही मूल दशमलव मान a DECIMAL(5,2) था .

रूपांतरण त्रुटि का उदाहरण

जैसा कि उल्लेख किया गया है, यदि रूपांतरण समर्थित अंतर्निहित रूपांतरण नहीं है, तो एक त्रुटि वापस आ जाती है:

SELECT 'Age: ' + 10;

परिणाम:

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

इस मामले में, मैं एक स्ट्रिंग को जोड़ने की कोशिश कर रहा था (VARCHAR ) और एक नंबर (INT .) ) INT . के रूप में देखा जा रहा है VARCHAR . की तुलना में उच्च प्राथमिकता है , SQL सर्वर ने स्ट्रिंग को एक INT . में परोक्ष रूप से रूपांतरित करने का प्रयास किया ।

यह विफल रहा, क्योंकि इस स्ट्रिंग को पूर्णांक में परिवर्तित नहीं किया जा सकता है।

इसे दूर करने के लिए, हम सबसे पहले INT . को कन्वर्ट कर सकते हैं करने के लिए VARCHAR :

SELECT 'Age: ' + CAST(10 AS VARCHAR(2));

परिणाम:

Age: 10

अब दोनों ऑपरेंड में एक ही डेटा प्रकार है, और इसलिए SQL सर्वर बिना किसी अंतर्निहित रूपांतरण की आवश्यकता के सफलतापूर्वक ऑपरेशन करता है।

इस विशेष ऑपरेशन को करने का एक और तरीका है CONCAT() समारोह:

SELECT CONCAT('Age: ', 10);

परिणाम:

Age: 10

CONCAT() फ़ंक्शन एक स्ट्रिंग फ़ंक्शन है और इसलिए संयोजन से पहले सभी तर्कों को स्ट्रिंग प्रकारों में परोक्ष रूप से परिवर्तित करता है। इसलिए, हमें स्पष्ट रूप से रूपांतरण करने की कोई आवश्यकता नहीं थी।

हालाँकि, यदि स्ट्रिंग ऑपरेंड को किसी संख्या में परोक्ष रूप से परिवर्तित किया जा सकता है, तो यह + का उपयोग करते समय कोई त्रुटि उत्पन्न नहीं करेगा। ऑपरेटर:

SELECT '10' + 10;

परिणाम:

20

लेकिन इस मामले में, + ऑपरेटर एक स्ट्रिंग कॉन्सटेनेशन ऑपरेटर के बजाय एक अतिरिक्त गणितीय ऑपरेटर में बदल जाता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्चुअलबॉक्स के साथ मैक पर SQL सर्वर कैसे स्थापित करें

  2. एसक्यूएल सर्वर - प्राकृतिक जॉइन की कमी / एक्स जॉइन वाई यूज़िंग (फ़ील्ड)

  3. SQL सर्वर से Salesforce SOQL

  4. Oracle को SKIP LOCKED के साथ TOP N पंक्तियों को वापस करने के लिए बाध्य करें

  5. अंतिम डाली गई आईडी कैसे प्राप्त करें?