SQL සේවාදායකයේ දිනය ටයිම් දත්ත සමුදායකින් දිනය පමණක් ආපසු ලබා දෙන්නේ කෙසේද


1789
SELECT GETDATE()

ප්‍රතිලාභ: 2008-09-22 15:24:13.790

කාල කොටස නොමැතිව මට එම දිනය කොටස අවශ්‍යයි: 2008-09-22 00:00:00.000

මම එය ලබා ගන්නේ කෙසේද?


4
ඔබ වේලාව නොමැතිව දින දත්ත කට්ටලයක් ලබා ගැනීමට අපේක්ෂා කරන්නේ නම්, වේලාව 00:00:00 වුවද ඔබට වාසනාව නැත, ඔබට වර්චරයක් ලබා ගත හැකි නමුත් ව්‍යුහය දිවා කාලයක් වන අතර ඔබට සැමවිටම යම් කාලයක් ලැබෙනු ඇත.
ක්වින්ටින් රොබින්සන්

16
සැලකිල්ලට ගත යුතු එක් කරුණක් නම්, SQL සේවාදායක 2008 හි කාල සංරචකය නොමැතිව දින වකවානු ගබඩා කිරීම සඳහා වෙනම DATE දත්ත සමුදායක් ඇතුළත් වේ. වැඩි විස්තර මෙතැනින්: sql-server-performance.com/articles/dev/datetime_2008_p1.aspx
බෙන් හොෆ්ස්ටයින්

7
විවිධ කාලය ඉවත් කිරීමේ ක්‍රමවල කාර්ය සාධන පරීක්ෂණ ප්‍රති results ල පෙන්වන මෙම ලිපිය අතපසු නොකරන්න .
එරික්

18
ඡන්දයෙන් නොමඟ නොයන්න සහ පිළිගත් පිළිතුර, stackoverflow.com/a/126984/1155650
රෝහිත් විපින් මැතිව්ස්

8
O රෝහිත් ඔබ වැරදියට උපකල්පනය කරන්නේ මිනිසුන් සැලකිලිමත් වන එකම අනුවාදය 2008 බවයි. (වනාන්තරයේ තවත් අනුවාදයන් ඇත.) ඡන්ද තමන් වෙනුවෙන් කතා කරයි.
hktegner

Answers:


2499

මත SQL Server 2008සහ ඉහළ, ඔබ කළ යුත්තේ CONVERTමේ දක්වා:

SELECT CONVERT(date, getdate())

පැරණි අනුවාද වල, ඔබට පහත සඳහන් දෑ කළ හැකිය:

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))

උදාහරණයක් වශයෙන්

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

මට දෙනවා

2008-09-22 00:00:00.000

වාසි:

  • කිසිදු varchar<-> datetimeඅවශ්ය පරිවර්ථනයන්
  • ඒ ගැන හිතන්න අවශ්‍ය නැහැ locale

මයිකල් යෝජනා කළ පරිදි

මෙම ප්‍රභේදය භාවිතා කරන්න: SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

select getdate()

SELECT DATEADD(hh, DATEDIFF(hh, 0, getdate()), 0)
SELECT DATEADD(hh, 0, DATEDIFF(hh, 0, getdate()))

SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, getdate()))

SELECT DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)
SELECT DATEADD(mm, 0, DATEDIFF(mm, 0, getdate()))

SELECT DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)
SELECT DATEADD(yy, 0, DATEDIFF(yy, 0, getdate()))

ප්‍රතිදානය:

2019-04-19 08:09:35.557

2019-04-19 08:00:00.000
4763-02-17 00:00:00.000

2019-04-19 00:00:00.000
2019-04-19 00:00:00.000

2019-04-01 00:00:00.000
1903-12-03 00:00:00.000

2019-01-01 00:00:00.000
1900-04-30 00:00:00.000

52
+1 මෙය සාමාන්‍යයෙන් භාවිතා වන ද්විත්ව පරිවර්තන () ක්‍රමයට වඩා 35% වේගවත් බව පෙනේ (මමත් වසර ගණනාවක් තිස්සේ භාවිතා කර ඇත). කදිම එකක්.
ඩේන්

8
ඔබේ විසඳුමට මට පෙනෙන එකම අවාසිය නම් එය කරන්නේ කුමක්දැයි ඔබ නොදන්නේ නම් එය තරමක් අවුල් සහගත බවය. ද්විත්ව පරිවර්තන ක්‍රමය භාවිතා කිරීමෙන් ඔබේ අභිප්‍රාය අනාගත කේත නඩත්තු කරන්නන්ට වඩාත් පැහැදිලි වේ. BTW මම ඔබව පහත් කොට නැහැ. මම හිතන්නේ මම ඔබේ ක්‍රමය භාවිතා කිරීමට පටන් ගනිමි. Thankyou @aku
ජිම්

38
ඒ දිනය මධ්යම රාත්රියේ කිරීමට දිනයවේලාව කිරීම @pilavdzice කරන්නේ පිටවෙන්න අක්රියයි කාලය. ඔබ බලාපොරොත්තු වන ප්‍රති result ලය කුමක්ද? මෙම datetimeදත්ත වර්ගය ගත නොහැක සියලු කිසිදු කාලය . මම හිතන්නේ ඔබ පරිශීලක ඉදිරිපත් කිරීම සමඟ දත්ත ගබඩා කිරීම ව්‍යාකූල කරයි. ඔබට අවශ්‍ය සියල්ල පරිශීලකයාට කාල කොටසක් නොමැති (ශුන්‍ය නොවේ, හිස්) නූලක් පෙන්වීමේ ක්‍රමයක් නම් ඔබට අවශ්‍ය වන්නේ Convert(varchar(30), @Date, 101)හෝ ඊට සමාන දෙයක්. වැඩි විස්තර සඳහා SQL සේවාදායක පොත් ඔන්ලයින් බලන්න • වාත්තු කර පරිවර්තනය කරන්න.
එරික්

7
16 user1671639 දිවා කාලයේ දත්ත වර්ගයේ සෑම විටම දිනයක් සහ වේලාවක් අඩංගු වේ, ඔබට අනෙකක් නොමැතිව සංවේදීව ගබඩා කළ නොහැක - ඔබ SQL Server 2008 භාවිතා නොකරන්නේ නම්, වෙනම 'දිනය' සහ 'වේලාව' දත්ත ද ඇත වර්ග. ඔබ ඒ හා සමාන CONVERT () භාවිතා කරන්නේ නම්, ඔබට ඇත්ත වශයෙන්ම පසුකාලීන භාවිතය සඳහා නූලක් අවශ්‍ය වේ, එබැවින් ඔබ එය එලෙසම කරගෙන යනු ඇත - දිනය කපා හැරීම වෙනුවට දිනය හැඩතල ගැන්වීමේ කාර්යයන් භාවිතා කිරීම වඩා හොඳ වුවද - හෝ හරහා CAST(... AS DATE)හෝ CONVERT(DATE, ...), මෙම පිටුවේ බොහෝ විට සඳහන් කර ඇත.
මැග්නස්

10
ඔබගේ අත්තනෝමතික මට්ටමින් කප්පාදු කිරීම සඳහා වෙනත් ඕනෑම ප්‍රධාන පදයක් සඳහා මාරු කළ හැකි SELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)නිසා පිළිතුර වෙනස් කිරීමට මම නිර්දේශ කරමි . dddatepartdatetime
මයිකල් - කොහෙද මැටි ෂිර්කි

720

SQLServer 2008 හි දැන් 'දිනය' දත්ත වර්ගයක් ඇති අතර එය කාල සංරචකයක් නොමැති දිනයක් පමණක් අඩංගු වේ. SQLServer 2008 සහ ඉන් ඔබ්බට භාවිතා කරන ඕනෑම කෙනෙකුට පහත සඳහන් දෑ කළ හැකිය:

SELECT CONVERT(date, GETDATE())

41
දිනය සහ වේලාව වෙන් කිරීමේ ප්‍රශ්නයේ අනෙක් භාගයට පිළිතුරු සපයන SQL2008 හි 'කාල' දත්ත වර්ගය ද ඇත.
misteraidan

8
FYI, මම දින සිට කාලය කපා හැරීමේ විවිධ ක්‍රම මිණුම් සලකුණු කළ අතර මෙය වේගවත්ම ක්‍රමයයි. වෙනස කුඩා බව පිළිගත හැකි නමුත් එය විශාල # ාතන ගණනකට වඩා වේගවත් විය.
UnhandledExcepSean

2
sqlserver 2005 ගැන wt ??
ආචාර්ය MAF

MA Dr.MAF රවුම සම්පූර්ණ කරමින්, 2008 ට පෙර පිළිතුර මෙහි ඇත: stackoverflow.com/questions/113045/…
Frosty840

170

SQL 2008 සහ ඊට ඉහළින් භාවිතා කරන්නේ නම්:

select cast(getdate() as date)

3
Red ෆ්‍රෙඩ්රික් ගෝස්: කුමන වර්ගය, දිනය? ඔබ භාවිතා කරන SQL සේවාදායකයේ කුමන අනුවාදයද?
abatishchev

8
පරෙස්සම් වන්න! ප්‍රකාශ කරන්න @ date1 datetime = '2015-09-30 20: 59: 59.999'; වාත්තු තෝරන්න (date දිනය 1 දිනය ලෙස) ආපසු '2015-10-01'
නික්

6
Ick නික්: මෙය ඩේටයිම් හි ගැටලුවයි. DateTime2ඒ වෙනුවට භාවිතා කරන්න, එය හොඳින් ක්‍රියාත්මක වේ. sqlfiddle.com/#!6/9eecb7/2833
abatishchev

8
@Nick, abatishchev ප්රතිචාර පරිපූරණ කිරීම සඳහා, ඔබේ @ date1 ඇත්ත වශයෙන්ම 2015-10-01, නිසා DateTimeසීමාවන්. කිසිදු වාත්තු කිරීමකින් තොරව උත්සාහ කරන්න Date, එය ද ලබා දෙයි 2015-10-01! declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1=>2015-10-01
ෆ්‍රෙඩ්රික්

4
SQL උපක්‍රම මතක තබා ගැනීමට පහසු එකක්. මයික් පවසන පරිදි, 2008 සිට පමණක් නමුත්, ඔබ 2005 සහ ඊට පෙර ඩීබී කොතැනක හෝ සොයා ගන්නේ නම්, ඔබට ගැටළු රාශියක් තිබිය හැකිය :)
NicVerAZ

74

වර්චාර් වෙත සංවර්‍ධනය කිරීමට වඩා DATEADD සහ DATEDIFF හොඳයි. විමසීම් දෙකම එකම ක්‍රියාත්මක කිරීමේ සැලැස්මක් ඇත, නමුත් ක්‍රියාත්මක කිරීමේ සැලසුම් මූලික වශයෙන් දත්ත ප්‍රවේශ ක්‍රමෝපායන් පිළිබඳව වන අතර සෑම කෑල්ලක්ම ඉටු කිරීමට ගතවන CPU කාලය සඳහා වන ව්‍යාජ පිරිවැය සැමවිටම හෙළි නොකරයි. විමසුම් දෙකම පේළි මිලියන ගණනක් සහිත වගුවකට එරෙහිව ක්‍රියාත්මක වන්නේ නම්, ඩේට් ඩිෆ් භාවිතා කරන CPU කාලය පරිවර්තන CPU වේලාවෙන් 1/3 කට ආසන්න විය හැකිය!

විමසුම් සඳහා ක්‍රියාත්මක කිරීමේ සැලසුම් බැලීමට:

set showplan_text on
GO 

DATEADD සහ DATEDIFF යන දෙකම CONVERT_IMPLICIT ක්‍රියාත්මක කරයි.

බවට පරිවර්තනය විසඳුමක් සමහර කියවීමට, සරල හා පහසු වුවත්, එය වේ මන්දගාමී. දිවා කාලයට නැවත දැමීමේ අවශ්‍යතාවයක් නොමැත (මෙය ව්‍යංගයෙන් සේවාදායකයා විසින් කරනු ලැබේ). DateAdd සඳහා DateDiff ක්‍රමයේ සැබෑ අවශ්‍යතාවයක් නොමැති බැවින් පූර්ණ සංඛ්‍යා ප්‍රති result ලය ද ව්‍යංගයෙන් දිවා කාලයට පරිවර්තනය වේ.


දින වකවානුවෙන් CONVERT (varchar, MyDate, 101) තෝරන්න

  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

DatesADDED වෙතින් DATEADD (dd, 0, DATEDIFF (dd, 0, MyDate) තෝරන්න

  |--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0))))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

Di ඩිගි යෝජනා කළ පරිදි FLOOR () භාවිතා කිරීම ඩේට්ඩිෆ්ට වඩා කාර්ය සාධනයක් ඇති නමුත් දිවා කාලයේ දත්ත වර්ගය පාවීමට හා පසුපසට වාත්තු කිරීම නිර්දේශ නොකරයි.

පිරිමි ළමයින් මතක තබා ගන්න: කිසිවෙකු විශ්වාස නොකරන්න. කාර්ය සාධන සංඛ්‍යාලේඛන දෙස බලා එය ඔබම පරීක්ෂා කරන්න!

ඔබ ඔබේ ප්‍රති .ල පරීක්ෂා කිරීමේදී ප්‍රවේශම් වන්න. සේවාදායකයාට බොහෝ පේළි තේරීමෙන් කාර්ය සාධන වෙනස සැඟවී ඇති අතර ගණනය කිරීම් සිදු කිරීමට වඩා ජාලය හරහා පේළි යැවීමට වැඩි කාලයක් ගත වේ. එබැවින් සියලු පේළි සඳහා වැඩ සේවාදායකයා විසින් සිදු කරන බවට වග බලා ගන්න, නමුත් සේවාදායකයා වෙත පේළි කට්ටලයක් යවා නොමැත.

හැඹිලි ප්‍රශස්තිකරණය විමසුම් වලට බලපාන විට සමහර පුද්ගලයින්ට ව්‍යාකූලත්වයක් ඇති බව පෙනේ. එකම කණ්ඩායමක හෝ වෙනම කණ්ඩායම් වල විමසුම් දෙකක් ධාවනය කිරීමෙන් හැඹිලිගත කිරීම කෙරෙහි කිසිදු බලපෑමක් නැත. එබැවින් ඔබට හැඹිලිය අතින් කල් ඉකුත්විය හැකිය, නැතහොත් විමසුම් කිහිප වතාවක්ම ඉදිරියට සහ පසුපසට ධාවනය කළ හැකිය. විමසුම # 2 සඳහා වන ඕනෑම ප්‍රශස්තිකරණයක් පසුව එන ඕනෑම විමසුමකට බලපානු ඇත, එබැවින් ඔබ කැමති නම් # 1 ක්‍රියාත්මක කිරීම ඉවත දමන්න.

මෙතන සම්පූර්ණ පරීක්ෂාවක් තිර රචනය සහ කාර්ය සාධනය ප්රතිඵල DateDiff varchar පරිවර්තනයේදී වඩා සැලකිය යුතු වේගවත් වේ ඔප්පු බව.


රිකාඩෝ සී, හොඳ පරීක්ෂණයක්! ඔබ භාවිතා කරන SQL සේවාදායකයේ කුමන අනුවාදයද? MSFQL2000 ක්‍රමවේදය සමඟ ඩැඩිෆ් මා සඳහා තරමක් වේගයෙන් ක්‍රියා කරයි.
aku

සැලකිල්ලට ගත යුතු කරුණක් නම්, මම 1000.000 වාරයක් පරීක්ෂණය සිදු කළෙමි. තථ්‍ය-ලෝක දර්ශන සඳහා කාර්ය සාධන වෙනස සැලකිය යුතු නොවේ, මම අනුමාන කරමි
aku

අකූ, මම මෙම පරීක්ෂණය සඳහා SQL Server 2005 Express භාවිතා කළෙමි. මම 2000 දී වැඩ කරන අතර, පේළි මිලියන 24 කට වඩා වැඩි මේසයක් සමඟ එය පරීක්ෂා කර එයින් පිටවන දේ බලන්නෙමි.
රිකාඩෝ සී

අකු, එකම ප්‍රති .ල. පේළි මිලියන දහයකට වඩා කාර්ය සාධනයේ වෙනසක් නැත.
රිකාඩෝ සී

5
සමාන කාර්ය සාධනය පිළිබඳ ප්‍රකාශ සත්‍ය නොවේ. ඇත්ත වශයෙන්ම ක්‍රියාත්මක කිරීමේ සැලසුම් සමාන වනු ඇත !!! මෙම කාර්ය සාධනය මැනිය යුත්තේ සීපීයූ භාවිතය සංසන්දනය කිරීමෙන් මිස ක්‍රියාත්මක කිරීමේ සැලසුම් පරීක්ෂා කිරීමෙන් නොවේ.
එරික්

52

මේක උත්සාහ කරන්න:

SELECT CONVERT(VARCHAR(10),GETDATE(),111)

ඉහත ප්‍රකාශය ඔබගේ වර්තමාන ආකෘතිය බවට පරිවර්තනය කරයි YYYY/MM/DD, කරුණාකර ඔබේ මනාපය තෝරා ගැනීමට මෙම සබැඳිය බලන්න.


5
මෙය මා වෙනුවෙන් '2008/09/22' ලබා දෙයි
එඩීග්‍රෝව්ස්

1
SELECT CONVERT (VARCHAR (10), GETDATE (), 101) mm/dd/yyyyආකෘතියකි.
මැක්කෝ

4
ඔබ අමු පෙළ අගය මත පදනම්ව (ඩීබී වලින් පිටත) වර්ග කරන්නේ නම් 'ජපන්' ආකෘතිය වඩා හොඳය
සයිමන්_වීවර්


22

දිනය ආකෘතියෙන් ආපසු පැමිණීම සඳහා

CAST (ඇණවුම් දිනය AS දිනය)

ඉහත කේතය 2010 SQL සේවාදායකයේ ක්‍රියාත්මක වේ

එය 12/12/2013 මෙන් නැවත පැමිණේ

SQL Server 2012 සඳහා පහත කේතය භාවිතා කරන්න

CONVERT(VARCHAR(10), OrderDate , 111)

1
මෙම ප්රතිලාභ මට ශුන්ය නොවේ කාලය, දැන් දිනය එක්ක යාළු
බොහීමියානු

1
ඔබ භාවිතා කරන SQL සේවාදායකය නම් කුමන අනුවාදයදැයි මට දැනගත හැකිද?
මහේෂ් එම්එල්

1
A මහේෂ්එම්එල් එය MS SQL 2012 හි දිනය සහ වේලාව යන දෙකම ලබා දෙයි.
මාරෙක්


5
A මහේෂ්එම්එල් SQL සේවාදායකය 2010 වැනි දෙයක් නොමැත.
ස්වෙන්ඇල්ටර්මන්

22

CONVERTදිනය පමණක් ආපසු ලබා දීමට ඔබට ශ්‍රිතය භාවිතා කළ හැකිය . පහත සබැඳිය බලන්න:

SQL සේවාදායකයේ දිනය හා වේලාව හැසිරවීම 2000

CAST සහ CONVERT

පරිවර්තන ශ්‍රිතය භාවිතා කිරීම සඳහා වන වාක්‍ය ඛණ්ඩය:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 

17

ඔබට ප්‍රති result ලය අවශ්‍ය නම් varchar, ඔබ ඒ හරහා යා යුතුය

SELECT CONVERT(DATE, GETDATE()) --2014-03-26
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26

එය දැනටමත් ඉහත සඳහන් කර ඇත.

දිනය හා වේලාව අනුව ඔබට ප්‍රති result ල අවශ්‍ය නම්, ඔබ පහත සඳහන් ඕනෑම විමසුමක් භාවිතා කළ යුතුය

  1. SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 111)) AS OnlyDate 

    2014-03-26 00: 00: 00.000

  2. SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 112)) AS OnlyDate 

    2014-03-26 00: 00: 00.000

  3. DECLARE  @OnlyDate DATETIME
    SET @OnlyDate = DATEDIFF(DD, 0, GETDATE())
    SELECT @OnlyDate AS OnlyDate

    2014-03-26 00: 00: 00.000


15
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011

14

FLOOR () භාවිතා කිරීම - කාලය කපා දමන්න.

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)

4
මෙම ක්‍රමය වේගවත්ම නොවන අතර, පාවෙන දිනයන් වාත්තු කිරීම නිවැරදි බව එය ව්‍යංගයෙන් මිනිසුන්ට උගන්වයි. වැඩි විස්තර සඳහා කරුණාකර මෙම ලිපිය බලන්න .
එරික්

14

ඔබ SQL Server 2012 හෝ ඊට වැඩි අනුවාදයන් භාවිතා කරන්නේ නම් ,

Format()ශ්‍රිතය භාවිතා කරන්න .

SQL සේවාදායකය සඳහා දැනටමත් බහුවිධ පිළිතුරු සහ ආකෘතිකරණ වර්ග තිබේ. නමුත් බොහෝ ක්‍රම තරමක් අපැහැදිලි වන අතර නිශ්චිත දින ආකෘතියට අදාළව ආකෘති වර්ගය හෝ ශ්‍රිත සඳහා සංඛ්‍යා මතක තබා ගැනීම ඔබට අපහසු වනු ඇත. SQL සේවාදායකයේ ඊළඟ සංස්කරණ වලදී වඩා හොඳ විකල්පයක් ඇත්තේ එබැවිනි.

FORMAT ( value, format [, culture ] )

ඔබේ නරඹන්නන්ට අනුව දිනය නියම කළ හැකි බැවින් සංස්කෘතික විකල්පය ඉතා ප්‍රයෝජනවත් වේ.

ඔබ d (කුඩා රටා සඳහා) සහ D (දිගු රටා සඳහා) මතක තබා ගත යුතුය.

1. "d" - කෙටි දින රටාව.

2009-06-15T13:45:30 -> 6/15/2009 (en-US)
2009-06-15T13:45:30 -> 15/06/2009 (fr-FR)
2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)

2. "ඩී" - දිගු දින රටාව.

2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US)
2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU)
2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)

විමසුමේ තවත් උදාහරණ.

DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result'; 

SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';

US English Result Great Britain English Result  German Result Simplified Chinese (PRC) Result
----------------  ----------------------------- ------------- -------------------------------------
10/1/2011         01/10/2011                    01.10.2011    2011/10/1

US English Result            Great Britain English Result  German Result                    Chinese (Simplified PRC) Result
---------------------------- ----------------------------- -----------------------------  ---------------------------------------
Saturday, October 01, 2011   01 October 2011               Samstag, 1. Oktober 2011        2011101

ඔබට තවත් ආකෘති අවශ්‍ය නම්, ඔබට මෙතැනට යා හැකිය:

  1. සම්මත දිනය සහ කාල ආකෘති නූල්
  2. අභිරුචි දිනය සහ කාල ආකෘති නූල්

12

ඔබට CONVERT භාවිතා කර මුල් ප්‍රශ්නයට සමාන ප්‍රතිදානයක් ලබා ගැනීමට අවශ්‍ය නම්, එනම් yyyy-mm-dd ඉන්පසු CONVERT(varchar(10),[SourceDate as dateTime],121)පෙර යුවළ පිළිතුරු දුන් කේතයම භාවිතා කරයි, නමුත් ඉර සහිත yyyy-mm-dd බවට පරිවර්තනය කිරීමේ කේතය 121.

මට තත්පරයකට මගේ සබන් පෙට්ටියට පිවිසිය හැකි නම්, මේ ආකාරයේ හැඩතල ගැන්වීම දත්ත ස්ථරයට අයත් නොවන අතර, සත්‍ය ඩේට්පාර්ට් දත්ත වර්ග පවතින විට SQL සර්වර් 2008 වන තෙක් මෝඩ ඉහළ මට්ටමේ 'උපක්‍රම' නොමැතිව එය කළ නොහැකි විය. හඳුන්වා දී ඇත. දත්ත ස්ථරයේ එවැනි පරිවර්තනයන් සිදු කිරීම ඔබේ ඩීබීඑම්එස් හි විශාල පිරිවැය නාස්තියකි, නමුත් වඩා වැදගත් දෙය නම්, දෙවැන්න ඔබ මේ වගේ දෙයක් කරන විට, ඔබ මූලික වශයෙන් මතකයේ ඇති අනාථ දත්ත නිර්මාණය කර ඇති අතර පසුව ඔබ නැවත වැඩසටහනකට යනු ඇතැයි මම සිතමි. ඔබට එය වෙනත් 3NF + තීරුවකට නැවත දැමිය නොහැක, නැතහොත් ආපසු හැරවීමකින් තොරව ටයිප් කළ ඕනෑම දෙයකට සංසන්දනය කළ නොහැක, එබැවින් ඔබ කළ සියල්ලම අසාර්ථක වීමේ ලකුණු හඳුන්වා දී ඇති අතර සම්බන්ධතා යොමු කිරීම ඉවත් කර ඇත.

ඔබ සැමවිටම ඉදිරියට ගොස් ඔබගේ ඩේටයිම් දත්ත වර්ගය ඇමතුම් වැඩසටහනට ආපසු ලබා දිය යුතු අතර, පෙර ස්ථරයේ, අවශ්‍ය ඕනෑම වෙනස් කිරීමක් කරන්න. ඔබ ඇමතුම වෙත ආපසු යාමට පෙර දේවල් පරිවර්තනය කිරීමට ගිය විගස, ඔබ යොමු යොමු අඛණ්ඩතාව පිළිබඳ සියලු බලාපොරොත්තු යෙදුමෙන් ඉවත් කරයි. මෙය කිසියම් ආකාරයක අතින් ආපසු හැරවීමක් සිදු නොකරන්නේ නම්, යාවත්කාලීන කිරීම හෝ මකාදැමීමේ ක්‍රියාවලිය වළක්වනු ඇත, එය අවශ්‍ය නොවන විට ඔබේ දත්ත මානව / කේත / ග්‍රෙම්ලින් දෝෂයකට නිරාවරණය කරයි.


1
නිශ්චිත කාල ක්ෂේත්‍රයක දිනය-කොටස ලෙස පරිශීලක විසින් සපයන ලද දිනයකට ගැලපෙන සියලුම වාර්තා ලබා ගන්නා විමසුමක් ඔබට අවශ්‍ය නම් හැර, කියන්න . ඉදිරිපත් කිරීමේ ස්තරය තුළ පමණක් එය සිදු කිරීම වාසනාවකි. (ඔබට පරිවර්තනයක් අවශ්‍ය නැත, ඔබට දින අංක ගණිතය භාවිතා කළ හැකිය, නමුත් ඔබට අදහස ලැබෙනු ඇත…)
ලාසරස්

1
And ඇන්ඩ rew එය වැදගත් වන්නේ ඇයි? ඔබ කියනවා WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);- තීරුවෙන් කාලය ඉවත් කිරීමට කිසිම හේතුවක් නැහැ.
ආරොන් බර්ට්‍රන්ඩ්

1
AAaronBertrand එය ක්‍රියාත්මක වන්නේ ආදානයට @Dateශුන්‍ය කාල කොටසක් ඇතැයි උපකල්පනය කිරීම පමණි . එය සත්‍ය නොවන අවස්ථාවකදී, සේවාදායකයේ පැත්ත කප්පාදු කරන්නේ කෙසේදැයි ඔබ තවමත් දැන සිටිය යුතුය. ආකෘතිකරණ ඉදිරිපත් කිරීමේ ස්තරයට තැබිය යුතු බවට මම මෙම පිළිතුර සමඟ එකඟ වෙමි, නමුත් ඉදිරිපස කෙළවරට එය අත්හැර දැමීමෙන් අදහස් කරන්නේ ඔබ කප්පාදු කිරීමට ඉක්මන් ක්‍රමයක් දැන සිටිය යුතු නැති බවයි.
ලාසරස්

1
ඔබ කළ යුතුව ඇත්තේ ආදාන පරාමිතිය DATE බවට පත් කිරීම පමණි. මගේ අදහස නම් , බොහෝ මිනිසුන්ගේ පළමු සහජ බුද්ධිය වුවද, ඔබ කිසි විටෙකත් එවැනි කප්පාදුවක් තීරුවට යෙදිය යුතු නැත .
ආරොන් බර්ට්‍රන්ඩ්

1
A ආරොන්බර්ට්‍රන්ඩ් සහ එය උපකල්පනය කරන්නේ ඔබට පරාමිතියේ දත්ත සමුදාය පාලනය කළ හැකි බවයි. ගබඩා කර ඇති ක්‍රියා පටිපාටියකින් හොඳයි, වෙනත් අවස්ථාවන්හිදී එසේ කළ නොහැකිය. පරාමිතිය ඔබට අවශ්‍ය හා අවශ්‍ය වර්ගය බව සහතික කර නොගන්නේ මන්ද?
ඇන්ඩ rew ලාසරුස්

10
SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)

SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))

සංස්කරණය කරන්න: පළමු ක්‍රම දෙක අත්‍යවශ්‍යයෙන්ම එක හා සමාන වන අතර වර්චර් ක්‍රමයට පරිවර්තනය කිරීම සිදු කරයි.


1
මෙම ක්‍රම සියල්ලම විශිෂ්ටයි, නමුත් ඔබ භාවිතා කිරීමට යෝජනා කරන්නේ කුමන එකද?
eddiegroves

3
සටහන ඉහළ දෙකක් "නිවැරදි" අනුවාදය බව ය select dateadd(dd, datediff(dd, 0, getdate()), 0), එම නිසා ddගේ නම් ඕනෑම සඳහා සිදු ජින් කළ හැකි වන datepartප්රධාන වචන ඔබට තෝරාගන්න කොටස දී දිනය ඇමිණීම සඳහා. ( ddඑය සංක්ෂිප්තයක් පමණක් බව සලකන්න day.)
මයිකල් - කොහේද මැටි ෂිර්කි

10

දක්වා ඇති ප්‍රති result ලය ලබා ගැනීම සඳහා මම පහත විධානය භාවිතා කරමි.

SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))

එය ප්‍රයෝජනවත් යැයි මම සිතමි.



7

ඔබ ප්‍රති results ල තීරුවකට හෝ විචල්‍යයකට ලබා දෙන්නේ නම්, එයට DATE වර්ගය දෙන්න, සහ පරිවර්තනය ගම්‍ය වේ.

DECLARE @Date DATE = GETDATE()   

SELECT @Date   --> 2017-05-03

6

මම හිතන්නේ මෙය ඔබේ නඩුවේදී සාර්ථක වනු ඇත:

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25

6
DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'    
SELECT CONVERT(DATE, @yourdate)

2
මෙම යෝජනාව වෙනත් පිළිතුරු මගින් ආවරණය කර ඇත (එක් වරකට වඩා).
ඇන්ඩ්‍රි එම්

6

හරි, මම ටිකක් පරක්කු වුනත් :), මෙන්න තවත් විසඳුමක්.

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)

ප්‍රති ult ලය

2008-09-22 00:00:00.000

ඔබ SQL Server 2012 සහ ඊට වැඩි භාවිතා කරන්නේ නම් ඔබට FORMAT()මෙවැනි ශ්‍රිතයක් භාවිතා කළ හැකිය -

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')

ඔබගේ පළමු උදාහරණයට තවමත් කාල සංරචකයක් ඇත. ප්‍රශ්නයේ කාරණය වූයේ එය ඉවත් කරන්නේ කෙසේද යන්නයි.
සැක්

5

පුරාණ MSSQL සේවාදායකය 7.0 භාවිතා කළද, මෙහි කේතය (මෙම සබැඳිය අනුග්‍රහයෙනි ) එම අවස්ථාවේ මා සොයන ඕනෑම දින ආකෘතියක් ලබා ගැනීමට මට ඉඩ ලබා දුන්නේය:

PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE())  
PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10)  
PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110) 
PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106)
PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6) 
PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113)

එය මෙම ප්‍රතිදානය නිපදවීය:

1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015  1:14PM
2) Date/time in format MM-DD-YY: 02-27-15
3) Date/time in format MM-DD-YYYY: 02-27-2015
4) Date/time in format DD MON YYYY: 27 Feb 2015
5) Date/time in format DD MON YY: 27 Feb 15
6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630

5

දිනය:

CONVERT තෝරන්න (දිනය, GETDATE ())
CAST තෝරන්න (GETDATE () දිනය ලෙස)

කාලය:

CONVERT තෝරන්න (වේලාව, GETDATE (), 114)
CAST තෝරන්න (GETDATE () කාලය ලෙස)

5

ඔබට මේ ආකාරයෙන් කළ හැකිය:

SELECT CONVERT(date, getdate())
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

නිමැවුම් ලෙස:

2008-09-22 00:00:00.000

නැතහොත් සරලවම මේ ආකාරයට කරන්න:

SELECT CONVERT (DATE, GETDATE()) 'Date Part Only'

ප්‍රති ult ලය:

Date Part Only
--------------
2013-07-14

4

ඔබ DATE_FORMAT භාවිතා නොකරන්නේ ඇයි (ඔබේ_දත්ත_ තීරුව, '% d-% m-% Y')?

උදා: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name

'%d-%m-%Y'කොටස නැවත සකස් කිරීමෙන් ඔබට m, d සහ අවුරුද්දේ අනුක්‍රමය වෙනස් කළ හැකිය


4

මෙය පැරණි බව මම දනිමි, නමුත් කිසිවෙකු මේ ආකාරයෙන් එය ප්‍රකාශ කළේ කොතැනදැයි මම නොදනිමි. මට කිව හැකි දෙයින් මෙය ANSI ප්‍රමිතියකි.

SELECT CAST(CURRENT_TIMESTAMP AS DATE)

මයික්‍රොසොෆ්ට් ආයතනයට ANSI සම්මත CURRENT_DATE විචල්‍යයට සහය දැක්විය හැකි නම් හොඳයි.


select {fn current_date()} as todayමට වැඩ කරයි.
බ්‍රියානරි

rianbrianary - එය හොඳයි, නමුත් එය ANSI SQL නොවේ.
පත්තු

එය ප්‍රමාණවත් තරම් සාධාරණයි, නමුත් ඔබේ පිළිතුර ඉතා පහසුවෙන් අතේ ගෙන යා හැකි ය, නමුත් මම T-SQL වටා වැඩ කරන තාක් කල්, මෙයද ක්‍රියාත්මක වේ (සහ ANSI CURRENT_DATE ක්‍රියාත්මක කිරීම MS සඳහා ඉතා සුළු දෙයක් බව පෙන්වයි).
බ්‍රෙනරි

4

සඳහන් නොකළ පහත සඳහන් දේට මම කැමතියි:

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

එය දේශීය ගැන සැලකිලිමත් වන්නේ නැත, නැතහොත් ද්විත්ව පරිවර්තනයක් කරයි - එක් එක් 'ඩේට්පාර්ට්' බොහෝ විට ගණිතය කළත්. එබැවින් එය ඩැඩිෆ් ක්‍රමයට වඩා ටිකක් මන්දගාමී විය හැකි නමුත් මට එය වඩා පැහැදිලිය. විශේෂයෙන් මට අවුරුද්ද සහ මාසය අනුව කණ්ඩායම් කිරීමට අවශ්‍ය වූ විට (දිනය 1 ලෙස සකසන්න).


4

SQL SERVER 2012 සිට ඔබට මෙය කළ හැකිය:

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')


4

SQL සේවාදායකය 2000 හි

CAST(
(
    STR( YEAR( GETDATE() ) ) + '/' +
    STR( MONTH( GETDATE() ) ) + '/' +
    STR( DAY( GETDATE() ) )
)
AS DATETIME)


3

දිනය කොටස සහ දිනය සංයුති කිරීම සඳහා ඔබට පහත සඳහන් දෑ භාවිතා කළ හැකිය:

DATENAME => නිශ්චිත දිනයේ නිශ්චිත දිනය නිරූපණය කරන අක්ෂර මාලාවක් ලබා දෙයි

DATEADD => DATEPART()වර්ෂය, මාසය, දිනය, පැය, මිනිත්තුව වැනි දිනයක / වේලාවක එක් කොටසක් ආපසු ලබා දීමට ශ්‍රිතය භාවිතා කරයි.

DATEPART => නිශ්චිත දිනයේ නිශ්චිත දිනය නිරූපණය කරන පූර්ණ සංඛ්‍යාවක් ලබා දෙයි.

CONVERT()=> CONVERT()ශ්‍රිතය යනු එක් දත්ත වර්ගයක ප්‍රකාශනයක් තවත් දත්තයකට පරිවර්තනය කරන සාමාන්‍ය ශ්‍රිතයකි. CONVERT()විවිධ හැඩතලවල දිනය / වේලාව දත්ත ප්‍රදර්ශනය කිරීම සඳහා ශ්‍රිතය භාවිතා කළ හැකිය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.