我有一个带有日期列的表。此列是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数据类型转换为日期时间数据类型会导致超出范围的值。
任何想法如何做到这一点?
答案 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))
我猜其他人必须对日期使用错误的数据类型发表评论.....所以我不会在此提及任何内容:)