不使用喜欢搜索日期和时间格式

时间:2016-08-10 07:30:37

标签: sql sql-server

我的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'

没有回复......

我的问题的任何线索?基本上我今天只是显示数据。

谢谢

5 个答案:

答案 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)

您可以查看以下链接。

http://www.w3schools.com/sql/func_convert.asp

答案 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()函数。我希望这有效