php sql查询在月份和年份之间选择

时间:2016-09-01 03:27:55

标签: mysql sql-server postgresql

我希望在月份和年份之间的条件中选择BOOL TargetIs32Bit(HANDLE hProcess) { BOOL bResult; #ifdef _WIN64 bResult = FALSE; IsWow64Process(hTargetHandle, &bResult); #else typedef void (WINAPI *LPFN_GSI)(SYSTEM_INFO*); LPFN_GSI lpGetSystemInfo = GetProcAddress(GetModuleHandleW(L"kernel32"), "GetNativeSystemInfo"); if (!lpGetSystemInfo) lpGetSystemInfo = &GetSystemInfo; SYSTEM_INFO sysInfo = {0}; lpGetSystemInfo(&sysInfo); switch (sysInfo.wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_AMD64: case PROCESSOR_ARCHITECTURE_IA64: { bResult = FALSE; IsWow64Process(hTargetHandle, &bTargetIs32Bit); break; } default: bResult = TRUE; break; } #endif return bResult; } ... wchar_t lpFilename[MAX_PATH]; if (TargetIs32Bit(hTargetHandle)) lstrcpy(lpFilename, L"C:\\CodeInjectTest32.dll"); else lstrcpy(lpFilename, L"C:\\CodeInjectTest64.dll"); // inject DLL ... 。在我的数据库中有月份和年份的字段名称,用于月份和年份的商店生产输入。现在我想在2015年12月至2016年8月期间进行搜索产品输入 这是我的SQL query

sql

但结果返回SELECT * FROM tbl_produce p WHERE p.status =0 AND ((p.months >='12' AND p.years>='2015') AND (p.months <='8' AND p.years<='2016)) ; ,我知道我的查询不正确,但如何纠正呢?

2 个答案:

答案 0 :(得分:0)

为什么不将日期列设计为日期?

如果您想保留当前的设计,请尝试以下方法:

SELECT * 
FROM tbl_produce
WHERE status = 0 
AND concat(years, if(months > 9, months, concat('0', months))) 
  BETWEEN '201512' AND '201608'

OR

SELECT * 
FROM tbl_produce
WHERE status = 0 
AND (
  (years = 2015 AND months = 12) 
  OR 
  (years = 2016 AND months < 9)
)

答案 1 :(得分:0)

您的SQL查询正在寻找结果,其中p.months等于12和8,并且p.years等于2015年和2016年。

要获得您正在寻找的结果,请将两组括号之间的AND替换为OR,如下所示:

SELECT * FROM tbl_produce p WHERE p.status =0 AND ((p.months >='12' AND p.years = '2015') OR (p.months <='8' AND p.years = '2016));

如果我有权访问你的表结构,我会自己运行测试来确认,但我相信这是你正在寻找的结果的正确语法。