Anthony -The way we sometimes have to implement this stuff in Tableau's compilation layer is to use string search, substring extraction, casting and date arithmetic. It's not pretty, but it works. So something like
[dd] := int( left( [string], find( [string], '/') ) )[mm] := int( mid( [string], find( [string], '/'), find( [string], '/', 1 + find([string], '/') ) ) )[yyyy] := int( mid( [string], find( [string], '/', 1 + find([string], '/') ) ) )[date] := dateadd( 'day', [dd]-1, dateadd('month', [mm]-1, dateadd( 'year', [yyyy]-1900, #1900-01-01# ) ) )
I know this isn't MonetDB syntax, but hopefully it gives you the idea. And converting things to simple scalars as quickly as possible tends to be faster, especially when you have datetime data that does not compress nicely.
I am surprised that the strptime format is sensitive to field width. I'm pretty sure the MySQL implementation is not...
Niels & co. -
Converting strings to date scalars is one of the most common sources of nasty string calculations we see on Tableau Public. It is so bad that about 18 months ago we added a strptime-like function to the language to help our users solve annoying ETL problems like Anthony's. Data from Public also suggests that there are an endless number of date formats in the world (I've extracted nearly 600 so far) so I think it would be really useful if MonetDB could include cross-platform support for a date parsing language like strptime or ICU's time parsing (which is what we embedded in the Tableau Data Engine.) I know MonetDB is not an ETL tool, but some stuff is so common that it is worth making everyone's life easier.
On May 18, 2015, at 06:06 , Anthony Damico <ajdamico@gmail.com> wrote:
so.. other suggestions to solve my problem? :) i can probably do this with a bunch of horrible CASE statements, but i'm hoping for a more idiomatic strategy. thanks!
_______________________________________________
On Mon, May 18, 2015 at 9:01 AM, Niels Nes <Niels.Nes@cwi.nl> wrote:
On Mon, May 18, 2015 at 08:38:03AM -0400, Anthony Damico wrote:
> thanks Niels! so you are saying this command should work, correct? it
> currently does not..
>
> "SELECT str_to_date( '1/1/2014' , '%m/%d/%Y' ) as date"
>
> if i am on windows, do i need to install strptime separately? i am
> currently hitting this error that (from the version tracker) seems like
> it should've been resolved?
on windows this maybe a problem indeed. strptime etc support doesn't
exist on windows.
Niels
>
> Error in .local(conn, statement, ...) :
> Unable to execute statement 'SELECT str_to_date( '1/1/2014' , '%m/%d/
> %Y' ) as date'.
> Server says '!strptime support missing'.
>
> http://permalink.gmane.org/gmane.comp.db.monetdb.scm/36127
>
>
> thank you :)
>
>
>
>
>
>
>
>
>
>
> On Mon, May 18, 2015 at 8:09 AM, Niels Nes <Niels.Nes@cwi.nl> wrote:
>
> On Mon, May 18, 2015 at 07:17:28AM -0400, Anthony Damico wrote:
> > hi, i have a VARCHAR column with dates like
> >
> > "1/1/2014"
>
> Anthony
>
> We have the following date/string conversion functions
>
> create function str_to_date(s string, format string) returns date
> external name mtime."str_to_date";
>
> create function date_to_str(d date, format string) returns
> string
> external name mtime."date_to_str";
>
> create function "convert"(s string, format string)
> returns date
> external name mtime."str_to_date";
>
> Its based on the unix strftime/strptime (so for the format
> look at those).
>
> Niels
> >
> > and also
> >
> > "12/31/2014"
> >
> > since there are no leading zeroes, the months and days are in
> different
> > positions so i cannot use something like this to CAST it into a
> date
> > type.
> >
> >
> > CAST( SUBSTRING( x , 7 , 10 ) || '-' || SUBSTRING( x , 1 , 2 ) ||
> '-' |
> > | SUBSTRING( x , 4 , 5 ) AS DATE ) AS y
> >
> >
> > could someone offer advice to convert this string field to date
> in
> > monetdb? thanks!!
>
> > _______________________________________________
> > users-list mailing list
> > users-list@monetdb.org
> > https://www.monetdb.org/mailman/listinfo/users-list
>
>
> --
> Niels Nes, Manager ITF, Centrum Wiskunde & Informatica (CWI)
> Science Park 123, 1098 XG Amsterdam, The Netherlands
> room L3.14, phone ++31 20 592-4098 sip:4098@sip.cwi.nl
> url: https://www.cwi.nl/people/niels e-mail: Niels.Nes@cwi.nl
>
> _______________________________________________
> users-list mailing list
> users-list@monetdb.org
> https://www.monetdb.org/mailman/listinfo/users-list
>
>
>
> _______________________________________________
> users-list mailing list
> users-list@monetdb.org
> https://www.monetdb.org/mailman/listinfo/users-list
--
Niels Nes, Manager ITF, Centrum Wiskunde & Informatica (CWI)
Science Park 123, 1098 XG Amsterdam, The Netherlands
room L3.14, phone ++31 20 592-4098 sip:4098@sip.cwi.nl
url: https://www.cwi.nl/people/niels e-mail: Niels.Nes@cwi.nl
_______________________________________________
users-list mailing list
users-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/users-list
users-list mailing list
users-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/users-list
Best regards,
-------------------------------------------------
_______________________________________________
users-list mailing list
users-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/users-list