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

Oracle और SQL सर्वर के बीच रिक्त स्थान को संभालने का अंतर

मैंने Oracle और SQL सर्वर के बीच रिक्त स्थान को संभालने के बारे में एक प्रयोग किया क्योंकि मेरे काम के लिए Oracle का उपयोग करते समय अंतर देखा गया था।
(Oracle का संस्करण Oracle 19c है और SQL सर्वर का संस्करण SQL Server 2019 है क्योंकि ये मेरे पीसी में पहले ही स्थापित हो चुके थे।)

प्रयोग

Oracle

मैंने निम्नलिखित तालिका और डेटा के तहत एक प्रयोग किया।

CREATE TABLE CompareTestTable
(
     Seq         NUMBER
    ,ColCHAR     CHAR(10)
    ,ColVARCHAR  VARCHAR2(10)
);

INSERT INTO CompareTestTable VALUES( 1, 'aaa',  'bbb'  );       -- No space
INSERT INTO CompareTestTable VALUES( 2, 'aaa ', 'bbb ' );       -- A space after a string
INSERT INTO CompareTestTable VALUES( 3, ' aaa', ' bbb' );       -- A space before a string
INSERT INTO CompareTestTable VALUES( 4, ' aaa ', ' bbb ' );     -- Spaces after and before a string
select * from CompareTestTable where ColCHAR = 'aaa';       -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = 'aaa ';      -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = ' aaa';      -- Hit SEQ=3,4 records
select * from CompareTestTable where ColCHAR = ' aaa ';     -- Hit SEQ=3,4 records

select * from CompareTestTable where ColVARCHAR = 'bbb';    -- Hit SEQ=1 record
select * from CompareTestTable where ColVARCHAR = 'bbb ';   -- Hit SEQ=2 record
select * from CompareTestTable where ColVARCHAR = ' bbb';   -- Hit SEQ=3 record
select * from CompareTestTable where ColVARCHAR = ' bbb ';  -- Hit SEQ=4 record

कॉलम प्रकार चार होने पर स्ट्रिंग के बाद की जगह को अनदेखा कर दिया जाता है।
हालांकि, Varchar2 की स्थिति में, स्ट्रिंग के बाद या उससे पहले की जगह को अनदेखा नहीं किया जाता है।
विवरण निम्नलिखित है
https://docs.oracle.com/cd/B13789_01/server.101/b10759/sql_elements002.htm#:~:text=Nonpadded%20Comparison%20Semantics,-Oracle%20compares%20two&text=If%20two%20values%20of% 20भिन्न,%20मान%20%20माना जाता है%20बराबर।

SQL सर्वर

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

CREATE TABLE CompareTestTable
(
     Seq         INT
    ,ColCHAR     CHAR(10)
    ,ColVARCHAR  VARCHAR(10)
)
INSERT INTO CompareTestTable VALUES( 1, 'aaa',  'bbb'  );       -- No space
INSERT INTO CompareTestTable VALUES( 2, 'aaa ', 'bbb ' );       -- A space after a string
INSERT INTO CompareTestTable VALUES( 3, ' aaa', ' bbb' );       -- A space before a string
INSERT INTO CompareTestTable VALUES( 4, ' aaa ', ' bbb ' );     -- Spaces after and before a string
select * from CompareTestTable where ColCHAR = 'aaa';       -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = 'aaa ';      -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = ' aaa';      -- Hit SEQ=3,4 records
select * from CompareTestTable where ColCHAR = ' aaa ';     -- Hit SEQ=3,4 records

select * from CompareTestTable where ColVARCHAR = 'bbb';    -- Hit SEQ=1,2 records
select * from CompareTestTable where ColVARCHAR = 'bbb ';   -- Hit SEQ=1,2 records
select * from CompareTestTable where ColVARCHAR = ' bbb';   -- Hit SEQ=3,4 records
select * from CompareTestTable where ColVARCHAR = ' bbb ';  -- Hit SEQ=3,4 records

चार का परिणाम ओरेकल के समान है।
हालांकि, वर्चर की स्थिति में, परिणाम Oracle और SQL सर्वर के बीच भिन्न होता है, स्ट्रिंग के बाद या उससे पहले के रिक्त स्थान को अनदेखा किया जाता है।

इसलिए, ओरेकल और एसक्यूएल सर्वर के बीच के अंतर के कारण वर्चर का उपयोग करते समय यह ध्यान दिया जाना चाहिए।


  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 सर्वर 2016 में STRING_SPLIT ():फॉलो-अप #2

  2. मेरे SQL सर्वर संग्रहीत कार्यविधियों को नियंत्रित करने का सबसे अच्छा तरीका क्या है?

  3. SQL सर्वर में निष्पादन योजनाओं की तुलना करें

  4. SQL सर्वर (T-SQL) में डेटाटाइमऑफ़सेट मान पर समय क्षेत्र ऑफ़सेट बदलें

  5. SQL सर्वर में CHARINDEX () बनाम PATINDEX () - क्या अंतर है?