Avatar billede mccookie Seniormester
08. april 2017 - 08:01 Der er 4 kommentarer og
1 løsning

Udvælg data fra de seneste 30 dage og mail det til mig

Hej,

Jeg har en tabel i en ekstern database MSSQL2014 hvori der en kolonne som hedder "StartTime" og indholdet kunne være 20160818150823
2016 ==> ÅR
08 ==> Måned
18 ==> Dag
150823 => Tid

Kolonnen er en nvarchar og jeg ønsker mig at trække de rækker ud, som er max 30 dage fra dags dato - Jeg har forsøgt mig udi i convert etc. men uden videre held.

Mit forsøg:
SELECT        convert(datetime, convert(varchar(30), substring(debtransactions.StartTime, 1,8)), 101)  as TJEK_DATE, substring(debtransactions.StartTime, 7,2) + '/' + substring(debtransactions.StartTime, 5,2) + '-' + substring(debtransactions.StartTime, 1,4) as Dato, DEBTransactions.Amount as Kørte_minutter, Users.LastName, DEBTransactions.StartTime, DEBTransactions.EndTime, DEBTransactions.Pass,
                        DEBTransactions.APrice, DEBTransactions.Price, dateadd(day, -30, getdate()) as dage
FROM            DEBTransactions INNER JOIN
                        Users ON DEBTransactions.FkUser = Users.PkUserNumber
WHERE        'TJEK_DATE' > 'dage' AND amount > 75 AND PRICE > 0
ORDER BY StartTime desc

Sidespørgsmål:
Kan man få MSSQL Server til at køre et job hver nat kl. XX og sende en email med resultatet?

Pft.
Avatar billede jakobdo Ekspert
08. april 2017 - 10:35 #1
Prøv at test denne og se om ikke den kan lave din StartTime om til en datetime.

CONVERT(datetime,LEFT(StartTime,4)+SUBSTRING(StartTime,5,2)+SUBSTRING(StartTime,7,2))

Du burde kunne teste den ala:

SELECT CONVERT... FROM table;

Og se om din StartTime bliver printet som datetime
Avatar billede arne_v Ekspert
08. april 2017 - 23:32 #2
Den rette kombination af SUBSTRING og CONVERT boer virke.

Men da det paagaeldende format er sorteringsaegte var det maaske muligt at angribe problemet anderledes.

Lade applikationen konstruere tidespunktet for 30 dage side og saa lave en simpel stoerre end test paa de 2 strenge??
Avatar billede mccookie Seniormester
08. april 2017 - 23:46 #3
Arne_v> Jeg har også forsøgt kombien af substring og convert og gjort mig samme erfaring.

Kunne du uddybe dit forslag lidt..... jeg kan fint få MSSQL til at spytte en dato i et format ala YYYY-MM-DD 00:00:00.00000000000000

Men jeg mangler lidt med medvind :-)
Avatar billede mccookie Seniormester
08. april 2017 - 23:47 #4
#1 Den har jeg desværre forsøgt uden held
Avatar billede arne_v Ekspert
09. april 2017 - 03:46 #5
Eksempel:

SELECT ... WHERE startime > '20170308000000'
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

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