SQL Server date between LIKE - sql

Please help me how to insert LIKE % in date between. Example is:
SELECT *
FROM table
WHERE Date BETWEEN '" & startDate & "%'" AND '" & endDate & "%'"
So in this code where i should put LIKE so that data will appear?
example if i set like this
SELECT *
FROM table
WHERE Date LIKE '" & startDate & "%'"
it's working..LIKE meant read either startdate or %..for starting it will read %

Try this :
"Select (listOfFields)
FROM TABLE
where CONVERT(VARCHAR(25), Your_DATE, 126) BETWEEN 'Start_date%' AND 'EndDate%'";

Try something like this
SELECT * from table
WHERE CONVERT(VARCHAR, DateField, 120) BETWEEN '2010%' AND '2012%'

If the dates are of type string, you can't use BETWEEN*.
If the dates are of type date or datetime, you can't use LIKE.
*Actually between might work with text because b is between a and c but it will not return correct results with date strings.

Related

SELECT * FROM MyTable WHERE [Date] = ([Date] + 8 hours)

My problem starts with the fact that my server is in a totally different country, so we have a difference of 8 hours (GMT).
So when I'm trying to do something like this:
CreateNewDataSet("SELECT * FROM tblArchives WHERE [Date] =" & DateAndTime.Today.Date.ToString("MM/dd/yyyy") & "'; & , "tblArchives")
It won't get all the results because it happened today in my country but yesterday where the server is based.
I tried unsuccessfully to use the DATEADD function.
Is there any way to do something like:
SELECT FROM WHERE [DATE+8 hours] =DateAndTime.Today.Date.ToString("MM/dd/yyyy")
Why don't you subtract the hours from the other side of the condition statement:
CreateNewDataSet("SELECT * FROM tblArchives WHERE [Date] =" & DateAdd(DateInterval.Hour, -8, DateAndTime.Today.Date).ToString("MM/dd/yyyy") & "'; & , "tblArchives")
You could move the date calculation in to the SQL so that you get the servers date something like
SELECT * FROM tblArchives WHERE Date = DateAdd(HH, +8,getdate())
try to run DateAdd(HH, +8,getdate()) to see the actual date and time it uses in your query. I have similar needs but I always set the time to be 1 millisecond after midnight to one millisecond before midnight. This will make sure you get all the data for a particular day.
you have to use DateTime.AddHours method
"SELECT * FROM tblArchives WHERE [Date] =" &
DateAndTime.Today.AddHours(-8).ToString("MM/dd/yyyy")
Instead of adding +8 hours to [Date] Column, add -8 to the current server date

Date and Time Formatting in VB.net and SQL Server

I have a table in which data is been logged in 'yy/MM/dd HH:mm:ss' format and my regional setting is '2016-04-02 14:25:15' type. I want to get details in a following query but it is not populating any results
The query I used is
select
Date_time, alarm_id, alarm_message
from
table01
where
Date_time between '" & DateTimePicker5.Value & "' and '" & DateTimePicker6.Value & "'
I also tried using one function which I had written is
Private Function FormatDate(ByVal dat As String) As String
Dim FTDate As Date
FTDate = FormatDateTime(Convert.ToDateTime(dat), DateFormat.ShortDate)
FormatDate = Format(FTDate, "yy/MM/dd HH:mm:ss")
End Function
And used the same again in query as
select
Date_time, alarm_id, alarm_message
from
table01
where
Date_time between '" & formatdate(DateTimePicker5.Value) & "' and '" & formatdate(DateTimePicker6.Value) & "'
Please suggest appropriate answer make sure that I don't want to change my regional setting and on form load event. I've written the following code
DateTimePicker5.Format = DateTimePickerFormat.Custom
DateTimePicker5.CustomFormat = "yy/MM/dd HH:mm:ss"
DateTimePicker6.Format = DateTimePickerFormat.Custom
DateTimePicker6.CustomFormat = "yy/MM/dd HH:mm:ss"
The Table Is In Below Mentioned Format
**Datetime V1 P1**
16/08/29 19:12:24 10 STB-1
16/08/29 19:12:19 20 STB-1
16/08/29 19:12:18 30 STB-1
16/08/29 19:09:50 40 STB-1
Never ever ever EVER use string concatenation to put values into a query like that! It's practically begging to wake up one morning and find out your site was hacked six months ago.
The first thing you need to do is fix the schema, so that your date values are actually stored as DateTime columns. There are so many reasons for this, I can't even begin to describe them all. Just do it!
Once that's done, you build the query like this:
Const SQL As String = _
"SELECT Date_time, alarm_id, alarm_message
FROM table01
WHERE Date_time between #StartTime AND #EndTime"
Hey, look: it's a constant. Now that's not strictly necessary; I usually just use a normal Dim'd String value. However, I wanted to prove a point here: your SQL statement is set to use specific place holders that will never at any point have data in them. The values you provide for those #StartTime and #EndTime values will be completely separated and quarantined from your SQL command, such that no possibility for injection ever exists.
Once you have the SQL command string, you can use it like this (repeating the string definition so everything is in one place):
Const SQL As String = _
"SELECT Date_time, alarm_id, alarm_message
FROM table01
WHERE Date_time between #StartTime AND #EndTime"
Using cn As New SqlConnection("connection string here"), _
cmd As New SqlCommand(SQL, cn)
cmd.Parameters.Add("#StartTime", SqlDbType.DateTime).Value = DateTimePicker5.Value
cmd.Parameters.Add("#EndTime", SqlDbType.DateTime).Value = DateTimePicker6.Value
cn.Open()
Using rdr As SqlDataReader = cmd.ExecuteReader()
While rdr.Read()
' ...
End While
End Using
End Using
Or if you're filling a DataTable:
Dim result As New DataTable()
Const SQL As String = _
"SELECT Date_time, alarm_id, alarm_message
FROM table01
WHERE Date_time between #StartTime AND #EndTime"
Using cn As New SqlConnection("connection string here"), _
cmd As New SqlCommand(SQL, cn), _
ad As New SqlDataAdapter(cmd)
cmd.Parameters.Add("#StartTime", SqlDbType.DateTime).Value = DateTimePicker5.Value
cmd.Parameters.Add("#EndTime", SqlDbType.DateTime).Value = DateTimePicker6.Value
ad.Fill(result)
End Using
Note that using this method, you never have to worry about your DateTime format. ADO.Net figures it out for you. It knows about .Net DateTime objects, and it knows about Sql Server DateTime columns, and it handles conversions between the two types naturally.
This is some what a tricky solution.
Since year kept as 'yy' in the backend,following are the assumptions.
if the year part of the database field is between 00 to 16 ,need to consider this as 2000 to 2016. for the remaining values script will consider year as 1917 to 1999 .
Can you try with the below script.
SELECT Date_time, alarm_id, alarm_message
FROM table01
WHERE
CASE WHEN LEFT(Date_time,2) between 00 and RIGHT(year(getdate()),2) THEN CONVERT(DATETIME,'20'+Date_time)
ELSE CONVERT(DATETIME,'19'+Date_time) END between '" & DateTimePicker5.Value & "' and '" & DateTimePicker6.Value & "'
You can use Convert function.
select
Date_time, alarm_id, alarm_message
from
table01
where
Convert(Datetime,Date_time) between Convert(Datetime,'" & DateTimePicker5.Value & "') and Convert(Datetime,'" & DateTimePicker6.Value & "')
Since:
Console.WriteLine(#1/31/2016 10:23:22 AM#.ToString("yy/MM/dd HH:mm:ss"))
returns 16/01/31 10:23:22
I guess that:
select
Date_time, alarm_id, alarm_message
from
table01
where
(Date_time >= '" & DateTimePicker5.Value.ToString("yy/MM/dd HH:mm:ss") & "' )
and (Date_time < '" & DateTimePicker6.Value.ToString("yy/MM/dd HH:mm:ss") & "')
will do the trick.
Notice that I've changed the between with simple compare conditions
Run this in SQL Server and check the results:
create table #dateTest (
testDate datetime
)
insert into #dateTest values ('2016-03-01')
select * from #dateTest
declare #fromDate datetime
set #fromDate = '2016-01-01'
declare #toDate datetime
set #toDate = '2016-03-01'
select
testDate
from
#dateTest
where
( testDate between #fromDate and #toDate )
-- 2016-03-01 00:00:00.000
select
testDate
from
#dateTest
where
( testDate <= #fromDate )
and ( testDate < #toDate )
-- No rows selected
drop table #dateTest

Database contains European dateformat but query searches on American date format

Well, I'm using an MS Access database and I have a field Date. In the property of this field I have specified that the format should be 'dd/mm/yyyy'. However, when I use queries on the field, it searches with the date format 'mm/dd/yyyy'. I have no idea why it's doing this because I thought the queries adapt to the field properties and I haven't been able to find a solution online. My location and timezone are set in Europe. This is the query that I used:
SELECT Count(*) AS Amount
FROM Plays
WHERE PersonID = 1001 AND RestaurantID = 101358 and Date = #7/6/2016#
So, in this query it doesn't search the 7th of June 2016 but the 6th of July 2016. Both PersonID and RestaurantID are set as numbers; Date is set as Date/Time. How do I fix it so the query searches as the date format 'dd/mm/yyyy' as well without having to use any sql functions everytime?
If your query is written in VBA, you MUST write the dates using m/d/y. That's it.
I tend to construct my SQL statements using Format(expr, "\#mm\/dd\/yyyy\#"). E.g:
const kUsDtFmt = "\#mm\/dd\/yyyy\#"
sSql = "SELECT * FROM myTable WHERE dtUpdated = " & Format(Date(), kUsDtFmt )
Note: "\" is the escape key in format strings, meaning that the next character is taken as is.
If you simply wish to filter on today's date, do this:
SELECT Count(*) AS Amount
FROM Plays
WHERE PersonID = 1001 AND RestaurantID = 101358 and [Date] = Date()
For other dates, use DateSerial which frees you from format considerations:
SELECT Count(*) AS Amount
FROM Plays
WHERE PersonID = 1001 AND RestaurantID = 101358 and [Date] = DateSerial(2016, 6, 7)
If you concatenate string expressions, use the ISO sequence:
Dim SomeDate As Date
SomeDate = DateSerial(2016, 6, 7) ' or any other date value.
DateString = Format(SomeDate, "yyyy\/mm\/dd")
SQL = "SELECT Count(*) AS Amount " & _
"FROM Plays " & _
"WHERE PersonID = 1001 AND RestaurantID = 101358 and [Date] = #" & DateString & "#"
Note please, that Date is a reserved word, thus may have to be bracketed as shown.
Welp, I eventually found a solution to the problem:
"SELECT COUNT(*) as Amount FROM Plays WHERE PersonID = " & Me.txtPersonID &_
" AND RestaurantID = " & Me.txtRestaurantID & " AND Date = #" & Month(Me.txtDate)_
& "/" & Day(Me.txtDate) & "/" & Year(Me.txtDate) & "#"
I expected some of your solutions to work but for some reason(s) they didn't. Anyhow, now the correct date is searched and the correct value is returned. Thanks for the time you spent helping me.
Use FormatDateTime with vbShortdate to make sure your date is formatted the way the system expects it to be and not the way humans like to see it.

Convert a Field format before Where Statement in sql

I am building a calendar in asp that is database populated using aspwebcalender. Problem is my database date format is mm-dd-yyyy (startdate field) and aspwebcalender is looking for mm/dd/yyyy (DateToUse value). I am trying to convert the field on the fly in my WHERE statement. I have tried the REPLACE, CONVERT and even parsing and rebuilding the field. Im sure there is some simple solution.
This is what I have so far for my field [startdate]:
SELECT * FROM customers
WHERE (SELECT(CONVERT(VARCHAR(10), startdate, 101)
AS [MM/DD/YYYY])) = #" & DateToUse & "# ORDER BY StartTime"
I know its a mess.
I have also tried:
SELECT * FROM customers WHERE
(Left((startdate),2)) + '/' + MID(startdate,4,2)+ '/' + right(startdate,4)) = " &
DateToUse & " ORDER BY StartTime"
and also:
SELECT * FROM customers WHERE
(REPLACE(startdate,-,/)) = #" & DateToUse & "# ORDER BY StartTime"
Thanks in advance
If startdate is a date Type and oracle database.
then use this one :
select to_char(StartTime, 'mm/dd/yyyy'), "OTHER COLUMNS to select" FROM customers WHERE
to_char(StartTime, 'mm/dd/yyyy ') = DateToUse ORDER BY StartTime desc;

UK date format query?

I hope this is solvable.
Basically, I'm working with an SQL Server database table and in this table there is a field called matchdate. The format of the field is nchar(50).
There are over 2000 records in my table and the dates in the matchdate field are all in UK format, for example, "29/04/2014".
I am trying to query the table so I can pull out records between two UK dates. To do this I am using the following query:
SET DATEFORMAT DMY;
SELECT * from mytable
WHERE CAST(matchdate as datetime) BETWEEN '" & startdate & "' and '" & enddate & "'
order by cast([matchdate] as datetime) asc"
As you can probably tell this type of query is certainly not my strength. If the UK startdate value is "01/03/2014" and the UK enddate value is "23/04/2014" I get the following error:
Microsoft OLE DB Provider for SQL Server error '80040e07'
Conversion failed when converting date and/or time from character string.
I'm guessing this is because I am using two UK dates formats? How do I query the UK formatted "matchdate" field table using UK "start" and UK "end" formatted dates and get around this error?
PS: Unfortunately, I do not have access to the database table.
Try using the CONVERT function for the date so that you can specify the date standard
e.g. UK is 103
-- test
SELECT CONVERT(DATETIME, '10 January 2014', 103)
SELECT * from mytable WHERE CONVERT(DATETIME, matchdate, 103) BETWEEN '" & startdate & "' and '" & enddate & "' order by CONVERT(DATETIME, matchdate, 103) asc"