0

我有表名会计年度


这些是列

  • id(自动递增)
  • 开始(财政年度开始日期)
  • end(财政年度结束日期)
  • 活动(0(打开)或 1(关闭))

  • 开始列包含日期,例如 2012-01-01

  • 结束列包含日期,例如 2013-12-31

我想知道财政年度的开始和结束日期

这些是条件

  1. 这是开放的,即0,
  2. 它也应该是最后插入的。

这是我尝试过的查询请根据我的条件更新我的查询

SELECT CONCAT(BEGIN,'/',END) AS YEAR FROM fiscalyear WHERE active='0' ORDER BY `id` DESC LIMIT 1

上面的查询以这种格式选择日期:2012-01-01/2013-12-31 但我想以这种格式打印选定的日期 2012-13..

4

4 回答 4

2

id如果您想要最后一行,您可以按自动递增的 DESC 顺序对表格进行排序。

SELECT `BEGIN`,`END` 
FROM `fiscalyear` 
WHERE `active`='0' 
ORDER BY `id` DESC
LIMIT 1

需要注意的是BEGIN和END是MySQL中的保留字,应该用“`”表示为字段

至于打印日期,我推荐 PHP 类DateTime

于 2012-11-25T17:41:46.723 回答
0

这是我需要的查询

SELECT
CONCAT(DATE_FORMAT(`BEGIN`, '%Y'), '-',
DATE_FORMAT(`END`, '%y')) AS mydates

FROM 0_fiscal_year WHERE closed= 0 ORDER BY idDESC LIMIT 1

于 2012-11-25T19:54:41.580 回答
0

id主键排序,并使用 a LIMIT 1,因此您只能获得最后一条记录。使用内置DATE_FORMAT格式化您的日期。

SELECT
    CONCAT(DATE_FORMAT(`BEGIN`, '%Y'), '-',
    DATE_FORMAT(`END`, '%Y')) AS mydates
FROM
    `fiscalyear`
WHERE
    `active` = 0
ORDER BY
    `id` DESC
LIMIT 1

编辑:我将查询更改为连接年份,因此它将输出2012-2013. 结果将在mydates. 如果您希望结束年份13而不是2013格式,则在格式字符串中使用%y小写字母。y

于 2012-11-25T17:44:27.527 回答
0

关于第二个问题,您可以将数据库中的 Begin 和 End 定义为 DateTime (我记得在 mySQL 中定义了一些类似的数据类型),然后您可以使用此函数:

/* Analyzes time-date and returns mktime!*/
function analyze_time_date($tdstr)
{
    // tdstr : 2010-08-12 11:41:14
    //         0000000000111111111
    //         0123456789012345678
    $year   = (int)substr($tdstr,0,4);
    $month  = (int)substr($tdstr,5,2);
    $day    = (int)substr($tdstr,8,2);

    $hour   = (int)substr($tdstr,11,2);
    $minute = (int)substr($tdstr,14,2);
    $second = (int)substr($tdstr,17,2);

    return mktime($hour,$minute,$second,$month,$day,$year);
}

/*  */
function format_time_date($tdstr,$format)
{
        return date($format,analyze_time_date($tdstr));
}

当您想在数据库中插入新行时,您应该'date time field name' = NOW()在 SQL 查询中使用。

于 2012-11-25T17:47:14.153 回答