2014-01-03 2 views
1

Я искал через Интернет, но не смог найти способ решить мою проблему. Мой запрос что-то подобноеMySQL Подстрока с WHERE

SELECT users.id, SUBSTRING(posts.datestr, 4, 8) 
FROM users, posts 
WHERE posts.datestr='Jan-2014' 

(этот запрос был выше сокращенная)

Значение в posts.datestr фактически 20-Jan-2014, но я хочу, чтобы это было Jan-2014 вместо этого, но даже после добавления кода, что SUBSTRING , он все еще как-то показывает как 20-Jan-2014.

Любая идея, что я сделал неправильно?

Спасибо!

+0

Является ли это СТРОКА-ДАТЫ VARCHAR? если да, то почему вы не используете в качестве типа данных? – Sharique

+0

попробуйте этот 'SELECT * FROM table WHERE YEAR (Date) = 2014 AND MONTH (Date) = 1" ' –

+0

Мой datestr - это varchar, это все еще работает? – user3156202

ответ

1

Вам необходимо выполнить псевдоним результата SUBSTRING и использовать этот псевдоним в ваших условиях.

Поскольку вы теперь использовать псевдоним в ваших условиях, вы не можете использовать пункт where, вы можете использовать хотя having пункт

что-то вроде:

SELECT users.id, SUBSTRING(posts.datestr, 4, 8) as shortdate 
FROM users, posts 
HAVING shortdata='Jan-2014' 
+0

псевдоним «shortdate», а «shortdata» используется в разделе «HAVING» –

0
SELECT users.id, SUBSTRING(posts.datestr, 4, 8) shortpostdate FROM users, posts WHERE shortpostdate='Jan-2014' 
0

Использовать Inner JOIN

SELECT users.id, SUBSTRING(posts.datestr, 4, 8) FROM users inner join posts on users.userid = posts.[primary key] WHERE posts.datestr='Jan-2014' 

Ниже ссылка может вам помочь http://www.w3schools.com/sql/sql_join_inner.asp

0

использование ниже

substr(posts.datestr,3) 

вместо

SUBSTRING(posts.datestr, 4, 8) 
0

Используйте DATETIME функцию вместо SUBSTRING()

SELECT users.id, DATE_FORMAT(STR_TO_DATE(posts.datestr, '%d-%b-%Y'), '%b-%Y') updatedDate 
FROM users, posts 
HAVING updatedDate = 'Jan-2014' 
Смежные вопросы