SQL格式INT到目前为止并添加条件

时间:2016-07-13 06:33:44

标签: sql sql-server date datetime

我有一个带有日期列的表。此列是INT,包含格式为YYYYMMDD的日期(例如20160713)。现在我想得到这些日期在今天之后的所有行。我尝试了以下方法:

SELECT ID, startdate, comment
FROM comments
WHERE startdate > getdate

但这会导致以下错误:

  

将表达式转换为数据类型datetime的算术溢出错误。

所以我尝试将它格式化为dd / mm / yyyy格式

CONVERT(VARCHAR(10), (convert(date,CONVERT(varchar(10),[startdate],103))),103) > getdate()

但是这导致了这个错误:

  

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

任何想法如何做到这一点?

6 个答案:

答案 0 :(得分:2)

尝试以下查询

SELECT 
    ID, 
    startdate, 
    comment
FROM 
    comments
WHERE 
    stadate > CAST(CONVERT(varchar(8),getdate(),112) AS INT)

答案 1 :(得分:2)

您可以尝试将int转换为日期值,但这意味着查询将无法使用您在startdate列上可能包含的任何索引。
另一个选项是将从GETDATE()返回的日期转换为与int格式匹配的int值:

DECLARE @Now datetime = GETDATE();
DECLARE @NowInt int =  YEAR(@Now) * 10000 + MONTH(@Now) * 100 + DAY(@Now);

SELECT ID, startdate, comment
FROM comments
WHERE startdate > @NowInt;

这样GetDate()只执行一次,转换为int也只执行一次,如果你有startdate,你的查询可以使用ob_start(); include("includes/connect.php"); if(isset($_POST['login'])){ $username=strip_tags(mysqli_escape_string($conn,$_POST["txt_username"])); $pass=strip_tags(mysqli_escape_string($conn,$_POST["txt_pass"])); if($username=="" || $pass=="") { echo"Enter Username And Password."; }else{ $sql=mysqli_query($conn,"select* from tbl_user where db_username='$username' and db_pass='$pass'")or die(mysqli_error($conn)); $count = mysqli_num_rows($sql); $res=mysqli_fetch_array($sql); if($count==1){ $query=mysqli_query($conn,"update tbl_user set db_isonline='1' where db_username='$username'")or die(mysqli_error($conn)); $user=$res['db_username']; $_SESSION["username"]=$res['db_username']; $_SESSION["level"]=$res['db_level']; $_SESSION['LAST_ACTIVITY'] = time(); header("location:main.php");exit(); }else{ echo"Username Or Password Incorrect";} } } ob_end_flush(); 上的索引。

答案 2 :(得分:1)

getDate转换为int更加容易。

cast(format(getDate(),'yyyyMMdd') as int) 

答案 3 :(得分:0)

试试这个:

SELECT ID, startdate, comment
FROM comments
WHERE CAST(startdate AS DATE) > getdate()

答案 4 :(得分:0)

SELECT ID, startdate, comment
FROM comments
WHERE CAST(STR(startdate) AS DATE) > getdate()

答案 5 :(得分:0)

不要转换列,而是将getdate()转换为整数

SELECT ID, startdate, comment
FROM comments
WHERE startdate > CONVERT(INT, CONVERT(VARCHAR(8), getdate, 112))

我猜其他人必须对日期使用错误的数据类型发表评论.....所以我不会在此提及任何内容:)