By: Jeffrey Yao | Updated: 2019-08-06 | Comments (3) | Related: More > Dates
probleem
sinds SQL Server 2012 hebben we een nieuwe functie genaamd format (), het is zeer krachtig in het formatteren van DateTime en numerieke waarden, wat zijn een aantal goede toepassingen van deze functie om te worden gebruikt in het dagelijkse DBA-werk?
oplossing
De functie SQL Server T-SQL FORMAT() is in wezen een CLR type systeemfunctie,en als zodanig, de .,Net opmaakregels zijn van toepassing op deze functie. Deze functie returnsa nvarchar waarde (of null waarde).
in mijn dagelijkse DBA werk, biedt deze functie veel gemak dat anderen wat vervelende T-SQL conversie en string manipulatie werk nodig hebben om de formatsI nodig te krijgen.,th>EnrollDate
Figuur 1 – Rapport
Stel mijn bron tabel en gegevens zoals de volgende:
Als we willen dat de gegevens worden weergegeven als in het , we moeten berekenen, is een berekende kolom op basis van de kolom.,/div>
Maar om zich te ontdoen van de dubbelzinnigheid, kunnen we gebruik maken van de functie OPMAAK() als volgt:
declare @dt date='2019-June-08';select FORMAT(@dt, 'ddd') -- returns Sat
Dus, voor ons voorbeeld hierboven vermeld, kunnen we gebruik maken van de volgende query te krijgen thedesired resultaat:
select EnrollDate, WeekDay=format(EnrollDate, 'ddd'), NewMembersfrom tempdb.dbo.NewAccount;
Het resultaat is:
Gebruik van SQL Server FORMAAT te krijgen van Verschillende Numerieke Weergave-Indelingen
Er zijn tal van voorschriften over hoe numerieke gegevens worden weergegeven, zoals een thousandseparator elke 3 cijfers, een percentage teken, een munt prefix of een andere formatwhen minus waarde wordt aangetroffen., De volgende tabel toont een aantal meest gebruikte numerieke waarde formaten.
een praktisch gebruik van het formaat wordt getoond in het volgende voorbeeld, dat wil zeggen dat ik eerder bij het controleren van rijtellingen voor tabellen in een database, het erg lastig vind om uit te vinden wat zeer hoge getallen zijn zonder het komma scheidingsteken, vooral als je honderden miljoenen rijen of meer hebt. De volgende code geeft de rijen van elke tabel in de database weer .
de kolom heeft een komma voor elke 3 cijfers, wat het lezen veel gemakkelijker maakt dan de kolom.,
gebruik de SQL Server-indeling om de duur van de SQL Server-agenttaak weer te geven
tabledbo van de taakgeschiedenis van SQL Server.sysjobhistory heeft een kolom met de naam zoals hieronder getoond:
Dit is een gehele kolom, wanneer ik een rapport moet genereren, wil ik echt dat dit HH:MM:SS-formaat is, bijvoorbeeld als run_duration 1 is, wil ik dat het 00:00:01 is,meer voorbeelden zijn zoals weergegeven in de volgende tabel.,
Run_value | Verwacht Weergave-Indeling |
---|---|
12 | 00:00:12 |
123 | 00:01:23 |
1234 | 00:12:34 |
12345 | 01:23:45 |
123456 | 12:34:56 |
251234 | 1d+01:12:34 |
Dus hoe kunnen we dit bereiken?
De truc hier is dat ik een niet-gedocumenteerde maar eenvoudige functie zal gebruiken in msdbdatabase, dbo.,agent_datetime,om een datetime waarde samen te stellen door een dummy waarde, zoals 20000101,in te voeren voor @date parameter en gebruik de kolom voor @time parameter, en gebruik dan FORMAT() om het UU:MM:SS geformatteerde resultaat te retourneren.
ter illustratie zal ik een tabel aanmaken en deze vullen met gegevens die de kolom in dbo simuleren.sysjobhistory tafel.
met de volgende code kan ik de van HHMMSSint waarde converteren naar HH:MM:SS string waarde.,
het resultaat is als volgt, precies wat Ik wil:
samenvatting
in deze tip hebben we de functie format() die in SQL Server 2012 is geïntroduceerd, opnieuw bekeken en een paar praktische voorbeelden opgesomd die anders moeilijk te implementeren zijn. De functie biedt gemak voordaily DBA rapport werk en wanneer goed gebruikt, de functie helpt om code beknopt,gemakkelijk te begrijpen en eenvoudig te onderhouden.
Ik heb het niet gehad over de cultuurparameter die wordt gebruikt in de functie format ()., Deze cultuur parameter kan zeer nuttig zijn in sommige culturerelated formaat werk, zoals valuta teken, weekdag naam, datumnotatie (dat wil zeggen Jaar/Maand/Dag of maand/dag/jaar, enz.). In sommige bedrijven met kantoren over de hele wereld, kunnen we enkele query ‘ s bouwen die cultuur-compatibele resultaten zullen genereren.
volgende stappen
u kunt enkele andere goede tips lezen over MSSQLTips.com praten over hetzelfde onderwerp.
deel uw eigen bevindingen of creatief gebruik van deze functie.,
- Format SQL Server Data with FORMAT Function
- nieuwe FORMAT en CONCAT functies in SQL Server 2012
- SQL Server functie om integer datum te converteren naar DateTime format
Er is ook een zeer interessant artikel over enkele tekortkomingen van de format() functie.,
Laatst Bijgewerkt: 2019-08-06
Over de auteur
Bekijk al mijn tips
- meer tips voor Databaseontwikkelaars…