为什么约会不参加2016年9月13日

时间:2016-09-27 07:20:52

标签: sql sql-server sql-server-2005

我正在检查12/09/201613/09/2016的条件,但它没有显示13/09/2016的数据并给出错误

  

将char数据类型转换为datetime数据类型会导致日期时间值超出范围。

这是我的查询

SELECT DISTINCT  
   b.mkey ,  a.N_UserMkey, cuser_id,isnull(a.N_UserMkey,cuser_id) aa,
   ISNULL(b.first_name + ' ', '')  
   + ISNULL(b.last_name, '') NAME, convert(varchar,a.U_datetime,103) Action_Date
  FROM      inward_doc_tracking_trl a  
   INNER JOIN user_mst b ON isnull(a.N_UserMkey,cuser_id) = b.mkey  
  WHERE 
  convert(datetime,a.U_datetime,103) 
    BETWEEN convert(varchar,'12/09/2016',103)
  AND convert(varchar,'13/09/2016',103)
   and b.mkey=2357

2 个答案:

答案 0 :(得分:2)

我不确定,但似乎你在这里累积了几个错误:

  • 请勿使用- (IBAction)capture:(UIButton *)sender { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleActionSheet]; [alert addAction:[UIAlertAction actionWithTitle:@"Camera" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { // Code for Cam }]]; [alert addAction:[UIAlertAction actionWithTitle:@"Gallery" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { //Code for Gallery }]]; [alert addAction:[UIAlertAction actionWithTitle:@"Remove Photo" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { //Code for removing photo }]]; [alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]]; [alert setModalPresentationStyle:UIModalPresentationPopover]; UIPopoverPresentationController *popPresenter = [alert popoverPresentationController]; popPresenter.sourceView = sender; popPresenter.sourceRect = sender.bounds; // You can set position of popover [self presentViewController:alert animated:TRUE completion:nil]; } 检查日期范围。由于日期时间的时间部分,这是非常错误的。经常被遗忘......你可以read this great blog by Aaron Betrand
  • 绝不使用特定于文化格式的文字日期。你可以read this (and other answers there)
  • 始终以所需类型比较数据。您是将日期转换为字符串,只是为了比较它们字母数字
  • 您在BETWEEN convert(varchar,'12/09/2016',103)中使用
  • 而没有长度... One more bad habit to kick

尝试将varchar条款更改为此(9月12日的所有日期时间,但不是13日)

WHERE

或此(9月12日和9月13日的所有日期时间)

WHERE a.U_datetime >= {d'2016-09-12'} AND a.U_datetime<{d'2016-09-13'}

答案 1 :(得分:1)

您需要转换为DATETIME

...
BETWEEN convert(datetime,'12/09/2016',103)
  AND convert(datetime,'13/09/2016',103)

目前查询只将BETWEEN参数保留为VARCHAR,然后服务器需要将它们与convert(datetime,a.U_datetime,103)进行比较。在那一刻,它们被转换为DATETIME,没有指定格式。