Date Format in Smart Note

 9 Replies
 2 Subscribed to this topic
 14 Subscribed to this forum
Sort:
Author
Messages
thummel1
Veteran Member Send Private Message
Posts: 121
Veteran Member
Hi, Does anyone know what the SQL should be in an infoset when trying to change the format of the birthdat from mm/dd/yyyy format to just mm/dd? I am not versed enough in SQL language to change this in my Infoset. Is there a way to change the format within the step called "Define Info set'?. I saw there are options to change the date format to various things, but of course, what I wanted was not an option. Any tips on how to change within SQL or within the Info Set would be appreciated. Thanks.
The.Sam.Groves
Veteran Member Send Private Message
Posts: 89
Veteran Member
Assuming you are defining the infoset with a SQL statement, you'd replace the current SQL defining your date with the following SQL - to_char(fieldname,'MM/DD') http://www.techonthenet.c...unctions/to_char.php - here's a helpful page with most of the formating options avaliable to you. It's important to remember that at the point of conversion, SQL and everything else will consider this to be a text string, not a date.
thummel1
Veteran Member Send Private Message
Posts: 121
Veteran Member
Thanks, I did try this as suggested, so in my Info Set it looks like this right now: and PAEMPLOYEE.BIRTHDATE = to_char(BIRTHDATE,"MM/DD"). This returns the following error message: Error: ORA-00904: "mm/dd": invalid identifier I tried is this way: PAEMPLOYEE.BIRTHDATE = to_char(BIRTHDATE,'MM/DD')And get this error message: Error: ORA-01843: not a valid month I am guessing I am close? I will also look at the link provided to see if that gives me any other clues...
Greg Moeller
Veteran Member Send Private Message
Posts: 1498
Veteran Member
to_char(BIRTHDATE,'MM/DD') is definitely the correct syntax if you are using an Oracle backend. Perhaps you have invalid data in the table?
The.Sam.Groves
Veteran Member Send Private Message
Posts: 89
Veteran Member
You must use single quotes in Oracle SQL, double quotes means something entirely different.
thummel1
Veteran Member Send Private Message
Posts: 121
Veteran Member
I know the info set works perfectly before I add this to the info set. I've tried it in two places; one is in SQL Developer within the Query Builder, and the other is directly into the Info Set in the Smart Note. In the Info set, I am entering it under the "Having" clause. I see that SQL Developer reads this field as a date/time field. I'm not sure if that matters?
The.Sam.Groves
Veteran Member Send Private Message
Posts: 89
Veteran Member
Also you may want to paste in a more complete portion of your code. If I'm mind-reading correctly, you are attempting to pull only people whose birthdate equals a set month/day combo. If so, that'd actually be: ---- and to_char(paemployee.birthdate,'MM/DD') = '10/31' ---- That would create a criteria that would select anyone with an October 31st birthday. If you are attempting to display the string instead, you'd be putting this into the portion of your SQL between the SELECT statement and the FROM statement. For instance a quick and dirty SQL to dump all employees by number and MM/DD of date of birth would be from _my system_ would be ---- SELECT employee, to_char(birthdate, 'MM/DD') as "Birthday", /* this is where you use double quotes - to assign field names 'better' names that might include 'forbidden' characters */ FROM prod.paemployee --- The output would be something along the lines of EMPLOYEE | Birthday 1 | 10/31 2 | 11/05 3 | 01/21 .... and you'll probably have to imagine the spacing looking right, still haven't gotten formatting down for this forum.
thummel1
Veteran Member Send Private Message
Posts: 121
Veteran Member
Actually, Sam, my objective is to change the format of the Birthdate from mm/dd/yyyy hh:mm:ss to mm/dd. This is to keep the birth year confidential. Here is my "Having" Clause. I can paste more code in it if you need. HAVING PERSACTHST.ACTION_CODE = 'HIREACTN1' AND EMPLOYEE.EMP_STATUS = 'A0' and EMPLOYEE.COMPANY = '1000' and PAEMPLOYEE.BIRTHDATE = to_char(BIRTHDATE,'mm/dd')
The.Sam.Groves
Veteran Member Send Private Message
Posts: 89
Veteran Member
You don't want to put it into the 'having' section. SQL is a bit different from programming languages. At the begining of your query there should be a SELECT section which lists all the fields are are going to be included in the output for the query. For instance my example above included two fields, employee and the field I chose to name Birthday. The next section is begun with a FROM statement. That defines (normaly) what tables are being directly hit by your query. In my example I am hitting only one table, prod.paemployee. The next section is where you define how to pick what records from the tables are being included. I don't have one in my example but they are stated with a WHERE statement. Next, if your query uses aggregating statements (like summing a value) then you'll have a section that explains how the query should group records together to count as one item (i.e. if you were summing an employee's pay checks you'd want to group all the checks with the same employee and company value) this is started by a GROUP BY statement. Next, if you need to only show certain records that have an aggregate value that matches a certain criteria, you need a section that starts with HAVING. This one works exactly like a WHERE statement except you can't do use WHERE on aggregates. Lastly if you need to pre-sort the output, you'd have an ORDER BY statement to start a section that lists which fields to stort by and whether it'd be an ascending or descending sort. ---- So... you need to actually add the TO_CHAR(BIRTHDATE,'mm/dd') bit to your SELECT section. I would advise you do something like I did in my example and add an AS "Birthday" to it, otherwise the column name is going to be "TO_CHAR(BIRTHDAY, 'mm/dd')". You can either add this to the end of the list to create a new field, or if you are replacing the BIRTHDATE field entirely, swap out the line that reads PAEMPLOYEE.BIRTHDATE, with to_char(PAEMPLOYEE.BIRTHDATE,'mm/dd') AS "BIRTHDATE",
thummel1
Veteran Member Send Private Message
Posts: 121
Veteran Member
Thank you, Sam. That worked perfectly!