我的SQL Server 2008中的数据格式为日期
CHECKTIME
2016-08-10 10:21:03.000
2016-08-10 10:15:42.000
然后我今天用日期搜索
SELECT [dbo].[CHECKINOUT].[USERID],CHECKTIME,[dbo].USERINFO.Name
FROM [dbo].[CHECKINOUT]
inner join [dbo].[USERINFO]
on [dbo].USERINFO.USERID = [dbo].CHECKINOUT.USERID
where CHECKINOUT.CHECKTIME like '%2016%'
order by CHECKINOUT.CHECKTIME desc
正在运行并显示所有2016年日期。但如果我用like '%2016-08-08'
更改选择,则不会返回任何内容。
我尝试了条件:
where CHECKINOUT.CHECKTIME = '2016-0-08'
没有回复......
我的问题的任何线索?基本上我今天只是显示数据。
谢谢
答案 0 :(得分:1)
是的,你的第一个线索是[CHECKINOUT].CHECKTIME
这是错误的。没有Month = 0。
其次,2016-08-08 10:21:03.000
的格式为'2016-08-08'
,您将其与[CHECKINOUT].CHECKTIME
进行比较。结果是假的。
尝试使用适当的格式将varchar
转换为'2016-08-10'
以匹配120
我使用了dateformat yyyy-mm-dd hh:mi:ss
,就像Varchar(10)
一样,使用yyyy-mm-dd
只从前10个字母开始。因此我只得到SELECT
[dbo].[CHECKINOUT].[USERID],CHECKTIME,[dbo].USERINFO.Name
FROM
dbo.[CHECKINOUT]
Inner Join
[dbo].[USERINFO]
On
[dbo].USERINFO.USERID = [dbo].CHECKINOUT.USERID
Where
Convert(Varchar(10),CHECKINOUT.CHECKTIME,120) = '2016-08-08'
Order by CHECKINOUT.CHECKTIME desc
。更多Date Formats
// inside IncomingCall broadcastreceiver
package com.example.shailesh.callbroadcastreceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
public class IncomingCall extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
// This code will execute when the phone has an incoming call
// get the phone number
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Toast.makeText(context, "Call from:" +incomingNumber, Toast.LENGTH_LONG).show();
} else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_IDLE)
|| intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_OFFHOOK)) {
// This code will execute when the call is disconnected
Toast.makeText(context, "Detected call hangup event", Toast.LENGTH_LONG).show();
}
}
}
答案 1 :(得分:0)
你的病情应该是
'2016-08-08%'
不是'%2016-08-08'
因为在您的版本中您在2016年之前寻找文本而不是在整个日期之后。
答案 2 :(得分:0)
对于上述查询,您应该使用convert而不是like,并且可以检查。
其中CHECKINOUT.CHECKTIME = SELECT CONVERT(char(10),GetDate(),126)
您可以查看以下链接。
答案 3 :(得分:0)
SELECT [dbo].[CHECKINOUT].[USERID],CHECKTIME,[dbo].USERINFO.Name
FROM [dbo].[CHECKINOUT]
inner join [dbo].[USERINFO]
on [dbo].USERINFO.USERID = [dbo].CHECKINOUT.USERID
where Convert(Date,CHECKINOUT.CHECKTIME) in ('2016/08/08')
order by CHECKINOUT.CHECKTIME desc
将返回特定日期的所有记录
如果你需要更多的模糊搜索试试
where Convert(Date,CHECKINOUT.CHECKTIME) like '%2016/08%')
order by CHECKINOUT.CHECKTIME desc
哪些应归还八月的所有内容
--------补充思想-----
如果你想让事情变得更有活力,并且意味着如果你总是在运行我从未修改过报告,我会做类似以下两个选项的事情
如果我只想展示我的成长今天我将使用以下
SELECT [dbo].[CHECKINOUT].[USERID],CHECKTIME,[dbo].USERINFO.Name
FROM [dbo].[CHECKINOUT]
inner join [dbo].[USERINFO]
on [dbo].USERINFO.USERID = [dbo].CHECKINOUT.USERID
where Convert(Date,CHECKINOUT.CHECKTIME) in (Convert(date(GetDate())))
order by CHECKINOUT.CHECKTIME desc
如果我想从昨天开始查看记录,我会使用以下
SELECT [dbo].[CHECKINOUT].[USERID],CHECKTIME,[dbo].USERINFO.Name
FROM [dbo].[CHECKINOUT]
inner join [dbo].[USERINFO]
on [dbo].USERINFO.USERID = [dbo].CHECKINOUT.USERID
where Convert(Date,CHECKINOUT.CHECKTIME) in (Convert(date(GetDate()-1)))
order by CHECKINOUT.CHECKTIME desc
答案 4 :(得分:-2)
尝试这个DATEPART()函数。我希望这有效