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

SQL सर्वर (T-SQL उदाहरण) में 'समय' को 'datetime2' में बदलें

इस लेख में समय . को परिवर्तित करने के उदाहरण हैं एक datetime2 . के लिए मान SQL सर्वर में मान।

जब आप समय . को रूपांतरित करते हैं datetime2 . के लिए मान , अतिरिक्त जानकारी को मूल्य में जोड़ा जाता है। ऐसा इसलिए है क्योंकि डेटाटाइम2 डेटा प्रकार में दिनांक और समय दोनों की जानकारी होती है। समय दूसरी ओर, डेटा प्रकार में केवल समय की जानकारी होती है।

अधिक विशेष रूप से, दिनांक '1900-01-01' पर सेट है (जब तक कि यह '1900-01-02' तक गोल न हो जाए), समय घटक की प्रतिलिपि बनाई जाती है, और Microsoft दस्तावेज़ के अनुसार, समय क्षेत्र ऑफ़सेट 00:00 पर सेट है (भले ही datetime2 डेटा प्रकार समय क्षेत्र जागरूक नहीं है और किसी भी समय क्षेत्र ऑफसेट को संरक्षित नहीं करता है)।

जब datetime2(n) . की भिन्नात्मक सेकंड सटीकता मान समय(n) . से अधिक है मान, मान को पूर्णांकित किया जाता है।

उदाहरण 1 - CAST () का उपयोग करके स्पष्ट रूपांतरण

यहां स्पष्ट रूपांतरण का एक उदाहरण दिया गया है। इस मामले में, मैं CAST() . का उपयोग करता हूं सीधे SELECT . के अंदर काम करता है समय . से स्पष्ट रूप से रूपांतरित करने के लिए कथन से डेटाटाइम2 . तक .

DECLARE @thetime time;
SET @thetime = '23:15:59.004007';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetime2) AS 'datetime2';

परिणाम:

+------------------+-----------------------------+
| time             | datetime2                   |
|------------------+-----------------------------|
| 23:15:59.0040070 | 1900-01-01 23:15:59.0040070 |
+------------------+-----------------------------+

जब आप समय . से रूपांतरित होते हैं से डेटाटाइम2 . तक , एक दिनांक घटक जोड़ा जाता है और 1900-01-01 . पर सेट किया जाता है .

हालांकि, ऐसे परिदृश्य हैं जहां दिनांक को 1900-01-02 . तक पूर्णांकित किया जा सकता है . यह भिन्नात्मक सेकंड और आप किस सटीकता का उपयोग करते हैं, इस पर निर्भर करेगा। इसके उदाहरण के लिए नीचे देखें।

उदाहरण 2 - भिन्नात्मक सेकंड प्रेसिजन

प्रत्येक डेटा प्रकार को निर्दिष्ट की गई भिन्नात्मक सेकंड की सटीकता के आधार पर आप अलग-अलग परिणाम प्राप्त कर सकते हैं। यह भिन्नात्मक भाग के वास्तविक मान पर निर्भर करेगा।

पिछले उदाहरण में, दोनों डेटा प्रकारों ने एक ही भिन्नात्मक सेकंड परिशुद्धता का उपयोग किया था। ऐसा इसलिए है क्योंकि मैंने एक पैमाना निर्दिष्ट नहीं किया (उनकी सटीकता को परिभाषित करने के लिए) और इसलिए वे दोनों अपने डिफ़ॉल्ट पैमाने के मूल्यों का उपयोग करते थे (दोनों 7 होते हैं)।

स्पष्ट होने के लिए, पैमाना किसी संख्या में दशमलव बिंदु के दाईं ओर अंकों की संख्या है। परिशुद्धता संख्या में अंकों की कुल संख्या है।

वैसे भी, उस उदाहरण में मैंने प्रारंभिक मान के लिए केवल 6 दशमलव स्थान निर्दिष्ट किए हैं, इसलिए, अंत में एक शून्य जोड़ा जाता है।

अगर मैं समय . के लिए उच्च सटीकता निर्दिष्ट करता हूं तो यहां बताया गया है कि क्या होता है datetime2 . की तुलना में मान मूल्य:

DECLARE @thetime time(7);
SET @thetime = '23:15:59.1234567';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetime2(4)) AS 'datetime2(4)';

परिणाम:

+------------------+--------------------------+
| time             | datetime2(4)             |
|------------------+--------------------------|
| 23:15:59.1234567 | 1900-01-01 23:15:59.1235 |
+------------------+--------------------------+

datetime2 . के लिए 4 का पैमाना निर्दिष्ट करके मान, परिणाम 4 दशमलव स्थानों तक कम हो जाता है, और इस मामले में इसे गोल किया जाता है।

जैसा कि आप उम्मीद कर सकते हैं, यह केवल आंशिक हिस्सा नहीं है जो गोल हो सकता है। यहां एक उदाहरण दिया गया है कि जहां भिन्नात्मक भाग मिनटों और सेकंडों को गोल कर देता है:

DECLARE @thetime time(7);
SET @thetime = '23:15:59.7654321';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetime2(0)) AS 'datetime2(0)';

परिणाम:

+------------------+---------------------+
| time             | datetime2(0)        |
|------------------+---------------------|
| 23:15:59.7654321 | 1900-01-01 23:16:00 |
+------------------+---------------------+

हालांकि, आप सटीकता को बदलकर एक ही डेटा के लिए अलग-अलग परिणाम प्राप्त कर सकते हैं। यदि हम सटीकता को केवल एक दशमलव स्थान तक बढ़ाते हैं, तो हमें यह मिलता है:

DECLARE @thetime time(7);
SET @thetime = '23:15:59.7654321';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetime2(1)) AS 'datetime2(1)';

परिणाम:

+------------------+-----------------------+
| time             | datetime2(1)          |
|------------------+-----------------------|
| 23:15:59.7654321 | 1900-01-01 23:15:59.8 |
+------------------+-----------------------+

तो इस मामले में मिनट और सेकंड नहीं थे गोल किया गया (लेकिन मिलीसेकंड थे )।

अगर मैं समय . सेट कर दूं तो यहां क्या होगा datetime2 . की तुलना में कम सटीक पैमाने का उपयोग करने के लिए मान मूल्य।

DECLARE @thetime time(0);
SET @thetime = '23:15:59.004007';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetime2) AS 'datetime2';

परिणाम:

+----------+-----------------------------+
| time     | datetime2                   |
|----------+-----------------------------|
| 23:15:59 | 1900-01-01 23:15:59.0000000 |
+----------+-----------------------------+

और जब हम इस पर होते हैं, तो यहां एक उदाहरण दिया जाता है कि हमारे सटीक पैमाने का परिणाम भिन्नात्मक सेकंड में हो सकता है, जिससे तारीख अगले दिन हो सकती है:

DECLARE @thetime time(7);
SET @thetime = '23:59:59.9999999';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetime2(0)) AS 'datetime2(0)';

परिणाम:

+------------------+---------------------+
| time             | datetime2(0)        |
|------------------+---------------------|
| 23:59:59.9999999 | 1900-01-02 00:00:00 |
+------------------+---------------------+

उदाहरण 3 - CONVERT() का उपयोग करके स्पष्ट रूपांतरण

यह पहले उदाहरण जैसा ही है, इस समय को छोड़कर मैं CONVERT() . का उपयोग करता हूं CAST() के बजाय फ़ंक्शन करें .

DECLARE @thetime time;
SET @thetime = '23:15:59.004007';
SELECT 
  @thetime AS 'time',
  CONVERT(datetime2, @thetime) AS 'datetime2';

परिणाम:

+------------------+-----------------------------+
| time             | datetime2                   |
|------------------+-----------------------------|
| 23:15:59.0040070 | 1900-01-01 23:15:59.0040070 |
+------------------+-----------------------------+

उदाहरण 4 - निहित रूपांतरण

यहाँ एक ही काम करने का एक उदाहरण है, लेकिन एक अंतर्निहित प्रकार के रूपांतरण का उपयोग करना।

DECLARE @thetime time, @thedatetime2 datetime2;
SET @thetime = '23:15:59.004007';
SET @thedatetime2 = @thetime;
SELECT 
  @thetime AS 'time',
  @thedatetime2 AS 'datetime2';

परिणाम:

+------------------+-----------------------------+
| time             | datetime2                   |
|------------------+-----------------------------|
| 23:15:59.0040070 | 1900-01-01 23:15:59.0040070 |
+------------------+-----------------------------+

इसलिए हमें एक ही परिणाम मिलता है, भले ही यह एक स्पष्ट या निहित रूपांतरण हो।

यह एक अंतर्निहित रूपांतरण है क्योंकि हम इसे स्पष्ट रूप से रूपांतरित करने के लिए रूपांतरण फ़ंक्शन का उपयोग नहीं कर रहे हैं। हम केवल एक डेटा प्रकार के एक चर से दूसरे डेटा प्रकार के एक चर के लिए मान निर्दिष्ट कर रहे हैं। इस मामले में, जब हम समय . असाइन करने का प्रयास करते हैं, तो SQL सर्वर पर्दे के पीछे एक अंतर्निहित रूपांतरण करता है एक datetime2 . के लिए मान चर।

उदाहरण 5 - तारीख बदलें

यदि आपको तिथि बदलने की आवश्यकता है (लेकिन एक ही समय रखें), तो आप DATEADD() का उपयोग कर सकते हैं समारोह।

DECLARE @thetime time, @thedatetime2 datetime2;
SET @thetime = '23:15:59.004007';
SET @thedatetime2 = @thetime;
SET @thedatetime2 = DATEADD(year, 120, @thedatetime2);
SELECT 
  @thetime AS 'time',
  @thedatetime2 AS 'datetime2';

परिणाम:

+------------------+-----------------------------+
| time             | datetime2                   |
|------------------+-----------------------------|
| 23:15:59.0040070 | 2020-01-01 23:15:59.0040070 |
+------------------+-----------------------------+

इस मामले में मैं वर्ष के मूल्य में 120 जोड़ता हूं, जो इसे 2020 तक लाता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MS SQL सर्वर से कनेक्ट करते समय RODBC अस्थायी तालिका समस्या

  2. SQL सर्वर एक्सप्रेस बनाम एक्सप्रेस लोकलडीबी

  3. एसक्यूएल सर्वर (टी-एसक्यूएल) में डेटाबेस के संयोजन को कैसे दिखाएं

  4. SQL सर्वर प्रबंधन स्टूडियो (SSMS) के साथ डेटाबेस डिज़ाइन अवधारणाएँ भाग 1

  5. SQL सर्वर चुपचाप संग्रहीत कार्यविधियों में varchar की काट-छाँट करता है