Avatar billede friiiiis Novice
27. december 2011 - 16:36 Der er 11 kommentarer og
1 løsning

DATE funktioner i SQL

Hej.

jeg har et dato format i en SQL server 2008 bygget op på følgende måde (typen er string):

2008/06/17
2011/08/17
2008/04/1

Jeg har tiden i en anden kolonne med opbygningen (typen er string)

092345
184511
235959

Kan jeg opbygge en ny kolonne (vha. f.eks. SUBSTRING) ud fra de to eksisterende kolonner og definerer denne nye kolonne som DateTime?
Avatar billede niklask Nybegynder
27. december 2011 - 16:41 #1
Hvorfor ikke bare have det hele i en DateTime kolonne?
Avatar billede arne_v Ekspert
27. december 2011 - 16:50 #2
Ja.

Du kan bruge SUBSTRING, + og CONVERT.

http://msdn.microsoft.com/en-us/library/ms187928.aspx forklarer mulighederne i CONVERT.

Eller du kan skrive en CLR UDF, hvilket maaske vil vaere lidt koennere.
Avatar billede arne_v Ekspert
27. december 2011 - 16:54 #3
Jeg har faktisk en paa lageret:

using System;
using System.Globalization;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Data.SqlClient;

using Microsoft.SqlServer.Server;

namespace E
{
    public class DateTimeUtil
    {
        [SqlFunction]
        public static SqlString XFormat(DateTime dt, string fmt)
        {
            return dt.ToString(fmt, new CultureInfo("en-US"));
        }
        [SqlFunction]
        public static SqlDateTime XParse(string s, string fmt)
        {
            DateTime res;
            if(DateTime.TryParseExact(s, fmt, new CultureInfo("en-US"),
                                      DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite,
                                      out res))
            {
                return res;
            }
            else
            {
                return SqlDateTime.Null;
            }
        }
    }
}

Mulighederne for Format kan slaas op i .NET dokumentationen.
Avatar billede friiiiis Novice
27. december 2011 - 17:18 #4
beklager Arne men jeg er ikke hardcore programmør som dig...

Jeg forstår ikke koden oven for (jeg programmerer i Delphi) og jeg kender heller ikke til CLR UDF

koden
'Select DatePhysical, convert(datetime,DatePhysical,111) as agubsa from [Fiberline-Info]..[Stocktrans] '

virker fint men

'Select DatePhysical, convert(datetime,DatePhysical,111) as agubsa from [Fiberline-Info]..[Stocktrans] where
agubsa > :DatoStart and agubsa < :DatoSlut ';

giver mig fejlen "invalid column name agubsa"

Hvordan får jeg tidstampet ind i agubsa kolonnen?
Avatar billede Syska Mester
27. december 2011 - 18:06 #5
SELECT laves reelt set efter WHERE, og derfor kan du ikke bruge den dernede.

Du bliver nød til at lave convert i din where clause.
Avatar billede friiiiis Novice
27. december 2011 - 18:41 #6
Hej Buzzzzzzzzzzzzzzzz

og det virkede jo så helt fantastisk...

Nogen ideer til hvordan jeg får DATO formatete koblet sammen med et tidsformat i en selvstændigkolonne - tidsformattet ser således ud:

092345
184511
235959
Avatar billede arne_v Ekspert
27. december 2011 - 20:01 #7
vaelg et format som indeholder baade dag og tid og klippe klister sammen i det format med SUBSTRING og +
Avatar billede friiiiis Novice
27. december 2011 - 20:09 #8
jo tak Arne, men har du et eksempel som jeg kan tage udgangspunkt i....??

Jeg er med på SUBTSRING og + men ikke med på "format som indeholder baade dag og tid" - hvordan vælger jeg et format i SQL server?

Du behøver ikke løse det hele,e bare lige hvis mig det helt grundlæggende princip...

og smid et svar sammen med Buzz så jeg få uddelt pointene...
Avatar billede arne_v Ekspert
27. december 2011 - 20:11 #9
proev

CONVERT(REPLACE(datofelt,'/','-') + ' ' + SUBSTRING(tidfelt,1,2) + ':' + SUBSTRING(tidfelt,3,2) + ':' + SUBSTRING(tidfelt,5,2), 120)
Avatar billede arne_v Ekspert
27. december 2011 - 20:12 #10
Der er en liste af formater i det link jeg gav i #2
Avatar billede friiiiis Novice
27. december 2011 - 20:24 #11
fantastisk - og så skal du da lige have pointene...

smider du et svar...??

beklager bøvlet med amatøren her ;-)
Avatar billede arne_v Ekspert
27. december 2011 - 20:33 #12
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Sund & Bælt Holding A/S

IT Change & Release Manager

Udviklings- og Forenklingsstyrelsen

Kontorchef med ansvar for tværgående service management

Udviklings- og Forenklingsstyrelsen

Generalist til PMO

Saab Danmark A/S

Senior Software Developer

Udviklings- og Forenklingsstyrelsen

Testmanager til Partsrepræsentation