Date where Clause
I would like a where clause
where DataAssigned between 10/1/2012 and 09/1/2013
My DataAssigned Column is date and min format like "2013-05-20 10:56:52.0000"
simam
You can just so this
Select * from yourtable where datecolumn between '20120110' and dateadd(s,-1,dateadd(day,1,'20130109'))
The dates are passing here in ISO format and this is a best practice when dealing with dates, Becuase 10/1/2012
in India (Asian Countries) is interpreted as 10th jan where as in interpreted as USA it is 1st of October.
Satheesh
My Blog |
How to ask questions in technical forum
Similar Messages
-
Performance with dates in the where clause
Performance with dates in the where clause
CREATE TABLE TEST_DATA
FNUMBER NUMBER,
FSTRING VARCHAR2(4000 BYTE),
FDATE DATE
create index t_indx on test_data(fdata);
query 1: select count(*) from TEST_DATA where trunc(fdate) = trunc(sysdate);
query 2: select count(*) from TEST_DATA where fdate between trunc(sysdate) and trunc(SYSDATE) + .99999;
query 3: select count(*) from TEST_DATA where fdate between to_date('21-APR-10', 'dd-MON-yy') and to_date('21-APR-10 23:59:59', 'DD-MON-YY hh24:mi:ss');
My questions:
1) Why isn't the index t_indx used in Execution plan 1?
2) From the execution plan, I see that query 2 & 3 is better than query 1. I do not see any difference between execution plan 2 & 3. Which one is better?
3) I read somewhere - "Always check the Access Predicates and Filter Predicates of Explain Plan carefully to determine which columns are contributing to a Range Scan and which columns are merely filtering the returned rows. Be sceptical if the same clause is shown in both."
Is that true for Execution plan 2 & 3?
3) Could some one explain what the filter & access predicate mean here?
Thanks in advance.
Execution Plan 1:
SQL> select count(*) from TEST_DATA where trunc(fdate) = trunc(sysdate);
COUNT(*)
283
Execution Plan
Plan hash value: 1486387033
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 9 | 517 (20)| 00:00:07 |
| 1 | SORT AGGREGATE | | 1 | 9 | | |
|* 2 | TABLE ACCESS FULL| TEST_DATA | 341 | 3069 | 517 (20)| 00:00:07 |
Predicate Information (identified by operation id):
2 - filter(TRUNC(INTERNAL_FUNCTION("FDATE"))=TRUNC(SYSDATE@!))
Note
- dynamic sampling used for this statement
Statistics
4 recursive calls
0 db block gets
1610 consistent gets
0 physical reads
0 redo size
412 bytes sent via SQL*Net to client
380 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
Execution Plan 2:
SQL> select count(*) from TEST_DATA where fdate between trunc(sysdate) and trunc(SYSDATE) + .99999;
COUNT(*)
283
Execution Plan
Plan hash value: 1687886199
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 9 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 9 | | |
|* 2 | FILTER | | | | | |
|* 3 | INDEX RANGE SCAN| T_INDX | 283 | 2547 | 3 (0)| 00:00:01 |
Predicate Information (identified by operation id):
2 - filter(TRUNC(SYSDATE@!)<=TRUNC(SYSDATE@!)+.9999884259259259259259
259259259259259259)
3 - access("FDATE">=TRUNC(SYSDATE@!) AND
"FDATE"<=TRUNC(SYSDATE@!)+.999988425925925925925925925925925925925
9)
Note
- dynamic sampling used for this statement
Statistics
7 recursive calls
0 db block gets
76 consistent gets
0 physical reads
0 redo size
412 bytes sent via SQL*Net to client
380 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows
Execution Plan 3:
SQL> select count(*) from TEST_DATA where fdate between to_date('21-APR-10', 'dd-MON-yy') and to_dat
e('21-APR-10 23:59:59', 'DD-MON-YY hh24:mi:ss');
COUNT(*)
283
Execution Plan
Plan hash value: 1687886199
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 9 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 9 | | |
|* 2 | FILTER | | | | | |
|* 3 | INDEX RANGE SCAN| T_INDX | 283 | 2547 | 3 (0)| 00:00:01 |
Predicate Information (identified by operation id):
2 - filter(TO_DATE('21-APR-10','dd-MON-yy')<=TO_DATE('21-APR-10
23:59:59','DD-MON-YY hh24:mi:ss'))
3 - access("FDATE">=TO_DATE('21-APR-10','dd-MON-yy') AND
"FDATE"<=TO_DATE('21-APR-10 23:59:59','DD-MON-YY hh24:mi:ss'))
Note
- dynamic sampling used for this statement
Statistics
7 recursive calls
0 db block gets
76 consistent gets
0 physical reads
0 redo size
412 bytes sent via SQL*Net to client
380 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processedHi,
user10541890 wrote:
Performance with dates in the where clause
CREATE TABLE TEST_DATA
FNUMBER NUMBER,
FSTRING VARCHAR2(4000 BYTE),
FDATE DATE
create index t_indx on test_data(fdata);Did you mean fdat<b>e</b> (ending in e)?
Be careful; post the code you're actually running.
query 1: select count(*) from TEST_DATA where trunc(fdate) = trunc(sysdate);
query 2: select count(*) from TEST_DATA where fdate between trunc(sysdate) and trunc(SYSDATE) + .99999;
query 3: select count(*) from TEST_DATA where fdate between to_date('21-APR-10', 'dd-MON-yy') and to_date('21-APR-10 23:59:59', 'DD-MON-YY hh24:mi:ss');
My questions:
1) Why isn't the index t_indx used in Execution plan 1?To use an index, the indexed column must stand alone as one of the operands. If you had a function-based index on TRUNC (fdate), then it might be used in Query 1, because the left operand of = is TRUNC (fdate).
2) From the execution plan, I see that query 2 & 3 is better than query 1. I do not see any difference between execution plan 2 & 3. Which one is better?That depends on what you mean by "better".
If "better" means faster, you've already shown that one is about as good as the other.
Queries 2 and 3 are doing different things. Assuming the table stays the same, Query 2 may give different results every day, but the results of Query 3 will never change.
For clarity, I prefer:
WHERE fdate >= TRUNC (SYSDATE)
AND fdate < TRUNC (SYSDATE) + 1(or replace SYSDATE with a TO_DATE expression, depending on the requirements).
3) I read somewhere - "Always check the Access Predicates and Filter Predicates of Explain Plan carefully to determine which columns are contributing to a Range Scan and which columns are merely filtering the returned rows. Be sceptical if the same clause is shown in both."
Is that true for Execution plan 2 & 3?
3) Could some one explain what the filter & access predicate mean here?Sorry, I can't. -
JSP, Data Web Bean, BC4J: Setting the where clause of a View Object at run time
Hi,
I am trying to develop a data web bean in which the where clause of a View Object will be set at run time and the results of the query then displayed.
My BC4J components are located in one project while the coding for the data web bean is in another project. I used the following code bu t it does not work. Could you please let me know what I am doing wrong?
public void populateOSTable(int P_EmpId)
String m_whereString = "EmpView.EMP_ID = " + P_EmpId;
String m_OrderBy = "EmpView.EMP_NAME";
oracle.jbo.ApplicationModule appModule = null;
ViewObject vo = appModule.findApplicationModule("EMPBC.EMPAppModule").findViewObject("EMPBC.EMPView");
vo.setWhereClause(m_whereString);
vo.setOrderByClause(m_OrderBy);
vo.executeQuery();
vo.next();
String empName numAttrs = vo.getAttribute(EmpName);
System.out.println(empName);
Thanks.<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by JDev Team (Laura):
Here is how I have usually done mine:
1. In the JSP, use a RowsetNavigator bean to set the where clause and execute the query.
2. Use a custom web bean to process the results of the query (print to HTML).
for example:
<jsp:useBean class="oracle.jbo.html.databeans.RowsetNavigator" id="rsn" scope="request" >
<%
// get the parameter from the find form
String p = request.getParameter("p");
String s = request.getParameter("s");
// store the information for reference later
session.putValue("p", p);
session.putValue("s", s);
// initialize the app module and view object
rsn.initialize(application,session, request,response,out,"wt_bc_WT_bcModule.wtjoinView");
// set the where clause string
String theclause = "presname = '" + p + "' AND slideno=" + s;
// set the where clause for the VO
rsn.getRowSet().getViewObject().setWhereClause(theclause);
rsn.getRowSet().getViewObject().executeQuery();
rsn.getRowSet().first();
%>
</jsp:useBean>
<jsp:useBean class="wt_bc.walkthruBean" id="wtb" scope="request" >
<%
// initialize the app module and VO
wtb.initialize(application,session, request,response,out,"wt_bc_WT_bcModule.wtjoinView");
wtb.render();
%>
In this case, the render method of my custom web bean mostly gets some session variables, and prints various content depending on the session variable values.
Hope this helps.
</jsp:useBean><HR></BLOCKQUOTE>
Laura can you give the code of your walkthru bean? i wna't to initialize a viewobject, set the where clause and give that viewobject back to initialize my navigatorbar.
Nathalie
null -
Date functions in WHERE clause? HELP
The following two queries are identical except for how I supply the date values in the where clause, yet the first query using the a custom my_date function runs 30x slower than the one using the TO_DATE() function. Both return DATE types...any reason for the difference?
SELECT * from outcomes
WHERE start_time >=fn_my_date('START_MONTH')
AND start_time < fn_my_date('END_MONTH')+1
-- This runs 30x faster--
SELECT * from outcomes
WHERE start_time >=TO_DATE('08/01/2001','MM/DD/YYYY')
AND start_time < TO_DATE('08/31/2001','MM/DD/YYYY')+1
On the flip side, I've also experienced queries running slower using the TO_DATE() function vs the LAST_DAY(sysdate) for equivalenet dates.
nullI haven't seen the message coming up when using LENGTH or SUBSTR, but every time I connect to a database or attempt to change my preferences (including the "NLS Parameters: Comp" preference), this appears.
You are attempting to set the preference you should be to switch this from ANSI to something else, but SQL Developer is ignoring the preference setting (which I think is a bug).
A way to set the NLS_COMP to something else is to use something like "alter session set nls_comp = BINARY;". Note that changing any preference after that appears to overwrite this and you need to do this for each new connection you start. -
Hi Gurus,
I'd like to filter the data displayed in a report according to the date,we have an agenda for meetings,when I open the meetings report,it should display only the meetings of today,here what I did:
where meeting_date =
nvl(to_char(:tday,'dd-mm-yyyy'),to_char(sysdate,'dd-mm-yyyy'))this where clause is put in the query of the region source,
tday is a date picker to allow the user to change the date if he wants to navigate to other dates (other than today)
It gives me the error 'ora-01722'
where I went wrong?
Putting in mind that the meeting_date column contains meeting time too,what ever the meeting time is,if it is for today it should be displayed.
MohammadHi,
Not sure if this will help but maybe you could try:
where to_char(meeting_date,'dd-mm-yyyy') =
nvl(to_char(:tday,'dd-mm-yyyy'),to_char(sysdate,'dd-mm-yyyy'))
or perhaps this one:
where to_char(meeting_date,'dd-mm-yyyy') =
nvl(:tday,to_char(sysdate,'dd-mm-yyyy'))
Thanks,
Richard. -
How to use the MAX DATE condition in WHERE CLAUSE FILEDS
Hi,
I am trying to fetch the result for getting maximun date but when i try to execute the query i am getting the error as follows.
CONDITION : trunc(max(RD.DATERECEIVED)) BETWEEN TO_DATE('01/08/2011','DD/MM/YYYY') AND TO_DATE('01/08/2011','DD/MM/YYYY')
ERROR: Group function is not allowed here.
CHEERS,
PRABU AMMAIAPPANI see a couple of problems here.
First, what you posted below is not a syntactically valid query. It seems to be part of a larger query, specifically, this looks to be only the GROUP BY clause of a query.
Prabu ammaiappan wrote:
Hi,
I Have a group function in the Query. Below is the Query i have used it,
GROUP BY S.FREIGHTCLASS,
R.CONTAINERKEY,
S.SKU,
S.DESCR ||S.DESCRIPTION2,
S.PVTYPE,
RD.LOTTABLE06,
R.WAREHOUSEREFERENCE,
RD.TOLOC,
R.ADDWHO,
R.TYPE,
S.CWFLAG,
S.STDNETWGT,
S.ORDERUOM,
R.ADDDATE,
C.DESCRIPTION,
(CASE WHEN P.POKEY LIKE '%PUR%' THEN 'NULL' ELSE to_char(P.PODATE,'dd/mm/yyyy') END),
NVL((CASE WHEN R.ADDWHO='BOOMI' THEN RDD.SUPPLIERNAME END),SS.COMPANY),
RDD.BRAND,
S.NAPA,
RD.RECEIPTKEY,
R.SUSR4,
P.POKEY,
RDD.SUSR1,
r.STATUS, DECODE(RDD.SUSR2,' ',0,'',0,RDD.SUSR2),
rd.SUSR3Second, the answer to your primary question, "How do I add a predicate with with a MAX() function to my where clause?" is that you don't. As you discovered, if you attempt to do so, you'll find it doesn't work. If you stop and think about how SQL is processed, it should make sense to you why the SQL is not valid.
If you want to apply a filter condition such as:
trunc(max(RD.DATERECEIVED)) BETWEEN TO_DATE('01/08/2011','DD/MM/YYYY') AND TO_DATE('01/08/2011','DD/MM/YYYY')you should do it in a HAVING clause, not a where clause:
select ....
from ....
where ....
group by ....
having max(some_date) between this_date and that_date;Hope that helps,
-Mark -
Hello all,
I am new to Oracle, currently using 10G + aspvbscript.
I've been trying to query data using date in where clause but nothing seems to work.
The column is in date format.
It gets printed out like this: 5/1/2010 11:21:19 AM
I tried using this query:
SELECT * from table where TRUNC(user_date) > to_date('FEB-01-2010:00:00:00','mm-dd-yyyy:HH24:MI:SS') order by user_date asc.
It does return an output but it returns everything in table and does not take WHERE clause into consideration however, it does sort the date in ascending order.
I've tried getting rid of TRUNC tried to format date in a different way but no such luck.
Please point me to the right direction.
Thanks.Welcome to the forums!
In cases like this it is helpful if you can provide the following information:
1. Oracle version (SELECT * FROM V$VERSION)
2. Sample data in the form of CREATE / INSERT statements.
3. Expected output
4. Explanation of expected output (A.K.A. "business logic")
5. Use \ tags for #2 and #3. See FAQ (Link on top right side) for details.
I'll try and take a stab at your request based on the data given. What your query says is that it will return all rows that have a date greater then 2/1/2010 (MM/DD/YYYY). If your query is returning all rows then maybe the possibility exists that all the dates in the table are greater then 2/1/2010. Have you checked all dates to see if this is the case?
Also, one note about your TO_DATE() function.to_date('FEB-01-2010:00:00:00','mm-dd-yyyy:HH24:MI:SS')The date format does not match the string you are using with respect to month. Your string has 'FEB' but the format is 'MM' which is the numeric representation of the month. Although Oracle was able to convert it to the proper date on my system you should try and maintain consistency between the string and the date format used. -
I'm running Forms 6i client/server.
I have defined a where clause in the Property Palette for a Data Block.
What I like to do is to extend the where clause with a subquery, but
how can this be done? I mean, should I put the code in a trigger, which trigger?
Regards
Roarsimple where clause with sub_query
My block has name is dc_gmod. In the where pallete I put the text (and the all is work good!!!):
exists
select 1 from ttt.xxxxx_table v
where (dc_gmod.cd_gmod = v.cd_gmod)
and
(instr(:fst.tmp_nm,cd_place,1) > 0
or
cd_place IN
(select U_UNIT from ttt.xxxxxxxxx_tabe
where RG_U = :QA.RG_UNIT_RUN
AND SID = :QA.SID
AND SERIAL# = :QA.SERIAL
1.The dc_gmod.cd_gmod - is full name my block_name and item_name.
2. The ttt.xxxxx_table is full name of my table what is source for block dc_gmod
3. The cd_place is ITEM of BLOCK dc_gmod -
Can I use SYSDATE in the WHERE clause to limit the date range of a query
Hi,
Basicaly the subject title(Can I use SYSDATE in the WHERE clause to limit the date range of a query) is my question.
Is this possible and if it is how can I use it. Do I need to join the table to DUAL?
Thanks in advance.
SteliosAs previous poster said, no data is null value, no value. If you want something, you have nvl function to replace null value by an other more significative value in your query.<br>
<br>
Nicolas. -
Using multiple dates in WHERE clause
I have a multiple select box in a form. I am trying to select
records in SQL using the list that this form field produces. They
are dateTime values. How do I use this list in the WHERE clause of
my select statement?Man, I really hate posting anywhere near Dan - I've been
watching his mastery for years. (Talk about the big leagues) But
here goes anyway...
I've gotten my little behind kicked by more than a view date
issues, and I have basically gotten away from exact matches (unless
you really need them).
I'd probably do something like this:
SELECT field1,field2...
WHERE datetime_column_in_db > (OR LTE,OR GT/LT)
'#datetimeformatyoulike(form.datetimevalue1)#
Basically, finding records in RELATION to the form's datetime
value has always been much easier for me.
And God (and Dan) have mercy on my soul... -
Where Clause in Table Lookups for Data Load
Hello,
In Shared Components I created in Data Load Table. In this Data Load Table I added a Table Lookup. On the page to edit the Table Lookup, there is a field called Where Clause. I tried to add a Where Clause to my Table Lookup in this field but it seems that it has no effect on the Data Load process.
Does someone know how to use this Where Clause field?
Thanks,
SebHi,
I'm having the same problem with the where clause being ignored in the table lookup, is this a bug and if so is there a work around?
Thanks in advance -
I have ssas DB with two cubes, they share the date dimension. My query shows users on the dimension and visit as a measure. In the where clause I have range of dates. I have this strange behavior that after a FULL cube process I don't see
any data when applying the range. I'm sure that I have data for the range because when I filter each day desperately I can see data. Another weird scenario is that if the date is on the dimension I can see data. The thing that solve it is when process DATA
the cubes. This my query:
select non empty [Users].[User].[User] columns,
{[Measures].[Visits]} on rows
from [System Visit] where
([Dim_Date].[Georgian Calendar].[Date ID].&[20150125]:[Dim_Date].[Georgian Calendar].[Date ID].&[20150202])
Any thoughts what can be the issue? ThanksHi liranbn,
According to your description, you want to return the Visits within a date range. Right?
In this scenario, please modify your MDX query like below:
select nonempty([Users].[User].[User].members,[Measures].[Visits]) on columns,
[Measures].[Visits] on rows
from [System Visit]
where
({[Dim_Date].[Georgian Calendar].[Date ID].&[20150125]:[Dim_Date].[Georgian Calendar].[Date ID].&[20150202]})
Please see MDX with AdventureWorks sample:
If you have any question, please feel free to ask.
Simon Hou
TechNet Community Support -
Hi all,
How to use the where clause to select records based on condition,,,,, and this condition is based on a date,, for example:
select items from inventory_items
where purchasing_date in :from_date and :to_date;
Thank you very much
TasneemTasneem wrote:
Hi all,
How to use the where clause to select records based on condition,,,,, and this condition is based on a date,, for example:
select items from inventory_items
where purchasing_date in :from_date and :to_date;
Thank you very much
Tasneemtry this..
select items from inventory_items
where purchasing_date between :from_date and :to_date;
If someone's response is helpful or correct, please mark helpful or correct. -
When formatting a date field in a where clause the template put dot instead of comma
Hello to Headstart Workers !
In a query find block the template construct a where clause, in some cases, and i dont know when the template is formatting a date field putting a dot instead of a comma.
Ex.: to_date('19-01-2001'.'DD-MM-YYYY')
Anybody knows why or where the template do this.
Congratulations
Nelson- We created it using the HS utilities.
- "nls_numeric_character = ,.".
- it onky happen when the field date is not the first field in the where clause.
- i can see the problem just after pressing find button, already in the ls_block in last_query.
- the find_query works normally but cannot edit any line in ls_block.
Hope that i had helping
Regards
Nelson
null -
Problem with date fields in where clause after changing driver
Hi,
We have changed the oracle driver we use to version 10
and now we have some trouble with date-fields.
When we run this SQL query from our Java program:
select *
from LA_TRANS
where LA_TRANS.FROM_DATE>='20040101' AND LA_TRANS.FROM_DATE<='20041231'
We get this error code:
ORA-01861: literal does not match format string
The query worked fine whit the previous driver.
Is there some way I can run a SQL query with date fields
as strings in the where clause?
Thanks!Keeping the argument of standard SQL or not aside, comparing DATE columns to a constant string (which looks like a date in one of the thousands of the formats available, but not in others) is NOT one of the best programming practices and leads to heartburn and runtime errors (as you have seen yourself).
I would rather compare a DATE to a DATE.
Also, constants like that would be another issue to fix in your code:
http://asktom.oracle.com/pls/ask/f?p=4950:8:6899751034602146050::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:528893984337,
Maybe you are looking for
-
Provisioning mailboxes to different databases based on office location
We have a script to create all new users based on what is being created in our HR system. This script creates a mailbox for the user in the database "NewMailboxes". Then everyday a script is being called on the exchangeserver to move the newly create
-
Still Frames Disappear in Project Frame
Working with imovie 08, at work, I capture videos from hdv camera. I have to select short clips of work video and create projects from the clips. Then I use the "add still frame to project", and usually the still frames stay in the project frame whil
-
How to generify a Collection of Foo?
Hi! I'm about to convert some legacy code to use generics. However, i'm puzzled by the following piece of code (out of my memory so please bear with me): public SomeClass { public static void doSomething(Collection foos) { for (Iterator it = fo
-
SQL Developer 3.1 EA3: ORA-01446: cannot select ROWID . . .
I'm running into a problem in 3.1 EA3 that I did not see in 3.0 (Oracle IDE 3.0.04.34). Both Installations are 64 bit using 64 bit Java under Windows 7 x64 SP1. When from either the "Connections" or "Schema" window I open some views and select th
-
Can my Early 2008 model MacBook pro able to use two olld model of 23" apple cinema display ?
Hellow everyone, Just want to know " Can my Early 2008 model MacBook pro ( not the unibody )able to use two olld model of 23" apple cinema display ?" Thanks so much