Php 获取varchar数据类型的上一年

Php 获取varchar数据类型的上一年,php,sql,postgresql,Php,Sql,Postgresql,我有一个问题 SELECT * from table1 where sy='$school_year'; 还有我的 $school_year='2013-2014' //which is a varchar 我该怎么做 $school_year='2012-2013' 我试过了 SELECT * from table1 where sy='$school_year'-1; 但是给我一个错误,说明$school_year不是整数。我怎样才能拿到上一学年的$U?或者可能吗?

我有一个问题

SELECT * from table1 where sy='$school_year';
还有我的

 $school_year='2013-2014'      //which is a varchar
我该怎么做

 $school_year='2012-2013'
我试过了

 SELECT * from table1 where  sy='$school_year'-1;

但是给我一个错误,说明$school_year不是整数。我怎样才能拿到上一学年的$U?或者可能吗?

这里有一种方法可以获得前面的值:

select *
from table1
where sy < '$school_year'
order by sy desc
limit 1;
选择*
来自表1
sy在哪里<$school\u year'
按sy desc订购
限值1;

你可以做这样的事情:考虑这个例子:

$school_year='2013-2014';
$school_year = explode('-', $school_year);
$school_year[0] = ((int) $school_year[0] - 1);
$school_year[1] = ((int) $school_year[1] - 1);
$school_year = implode('-', $school_year);

$statement = "SELECT * from table1 where  sy='$school_year';";
echo $statement;

// Sample
// SELECT * from table1 where sy='2012-2013';
$q

SELECT * FROM table1 WHERE sy='2012-2013'

考虑重组你的桌子。您可能的选项(而不是格式化的
varchar
)是:

  • 使用起始(或结束)年份作为
    int
    (最简单,最不容易出错)
  • 使用一个可用的,可能是
    int4range
    (或)和(9.2+)
  • ,具有您自己的表示格式,并适用于它们

如果你有数据库设计的控制,考虑改变这个字段只包含学期的开始或结束的一年。生活就变得容易多了,不仅仅是这个问题。我同意乔纳森所说的。。重新构造您的表会更好,并且更容易对未来进行查询。尝试将字符串拆分为两列,并在需要时对其进行concat:)id,从年到年,2013年,2014年,从年到年(“-”,从年到年)
SELECT * FROM table1 WHERE sy='2012-2013'