Member 12133159 Ответов: 7

Как найти Дни Рождения между двумя датами независимо от года


У меня есть список записей, из которых я должен извлечь дни рождения между двумя заданными датами, независимо от года.
То есть я хочу, чтобы дни рождения приходились на промежуток между датами, скажем 2015-12-01 и 2015-12-31
Простой запрос between проверяет, попадают ли поля даты рождения между этими двумя или нет.
Пожалуйста помочь...
Спасибо

7 Ответов

Рейтинг:
36

Abdul Hannan Ijaz

SQL-запрос

ВЫБИРАТЬ *
из таблицы
Где функция datepart(день,@inputdate) = функция datepart(день, datecolumn)
и Datepart(month,@inputdate) = datepart(month, datecolumn)


Рейтинг:
21

Member 12133159

Я получил правильный ответ:

SELECT * From TABLE
WHERE Datepart(day,DATEFIELD) between datepart(day, @from_date)
and Datepart(day,@to_date) 
and 
Datepart(month,DATEFIELD) between datepart(month, @from_date)
and Datepart(month,@to_date)


Здесь этот запрос будет извлекать дни рождения между указанными датами. Спасибо всем за их драгоценные знания и информацию. :)


Sri Nivas (Vasu)

Крутой :) . Если бы вы задали такой вопрос, как.
SQL-запрос для поиска дней рождения... тогда вы получите правильный ответ на свой вопрос. Здесь вы получили ответы на c# и linq ;) .

Рейтинг:
2

Mehdi Gholam

Воспользуйся DATEPART и извлеките нужный вам месяц : Функция SQL Server DATEPART() [^]


Member 12133159

Я должен реализовать это в ASP.NET применение.....???

Mehdi Gholam

.. и в чем же проблема?

Member 12133159

Проблема в том, что я могу запустить это с помощью sqldatasource, но не могу запустить этот запрос в коде позади.....

Member 12133159

Выберите name, dob,mobile из rpd, где ((DATEDIFF(dd, getdate(), DATEADD(yyyy, DATEDIFF(yyyy, dob, getdate()) + 1, dob)) % 366 <= 10) и status='Alive' и dob !='1900-01-01 00:00:00'
Заказ месяца(дата рождения)АСК,день(дата рождения)АСК

Этот код предназначен для получения дней рождения предстоящих 10 дней с этого момента, я хочу реализовать это с помощью команды Between(между двумя датами).....

Рейтинг:
2

Raje_

Вы можете попробовать этот способ с помощью linq :

DateTime fromDate = DateTime.Parse("2015-12-01");
DateTime toDate = DateTime.Parse("2015-12-31");

var finalValue = from a in yourlist where (a.DOB.Date >= fromDate.Date && a.DOB.Date <= toDate.Date) select a;

[Редактировать]
Одна небольшая демонстрация :
   //User Class
   public class User
   {
       public string Name { get; set; }
       public DateTime DOB { get; set; }
   }

//Create a list with values :
  List<User> lst = new List<User>();
            lst.Add(new User{ Name = "Value 0", DOB = Convert.ToDateTime("2015-11-05") });
            lst.Add(new User{ Name = "Raj 0", DOB = Convert.ToDateTime("2015-12-01") });
            lst.Add(new User{ Name = "Raj 1", DOB = Convert.ToDateTime("2015-12-02") });
            lst.Add(new User{ Name = "Raj 2", DOB = Convert.ToDateTime("2015-12-03") });
            lst.Add(new User{ Name = "Raj 3", DOB = Convert.ToDateTime("2015-12-31") });

//then write filter code :
 DateTime fromDate = DateTime.Parse("2015-12-01");
            DateTime toDate = DateTime.Parse("2015-12-31");

            var finalValue = from a in lst where (a.DOB.Date >= fromDate.Date && a.DOB.Date <= toDate.Date) select a;

//here in finalValue you will see filtered data.



Удачи.


Рейтинг:
1

Sri Nivas (Vasu)

Ниже будет работать решение

using System;
using System.Collections.Generic;
using System.Linq;
			
  public class Person
   {
       public string PersonName { get; set; }
       public DateTime DateOfBirth { get; set; }
   }

public class Program
{
	public static void Main()
	{
		
		//Create a list with values :
  		List<Person> lst = new List<Person>();
            lst.Add(new Person{ PersonName = "Person 1", DateOfBirth = Convert.ToDateTime("2015-6-05") });
            lst.Add(new Person{ PersonName = "Person 2", DateOfBirth = Convert.ToDateTime("2014-05-01") });
            lst.Add(new Person{ PersonName = "Person 3", DateOfBirth = Convert.ToDateTime("2010-07-02") });
            lst.Add(new Person{ PersonName = "Person 4", DateOfBirth = Convert.ToDateTime("2005-08-03") });
            lst.Add(new Person{ PersonName = "Person 5", DateOfBirth = Convert.ToDateTime("2000-09-20") });
            lst.Add(new Person{ PersonName = "Person 6", DateOfBirth = Convert.ToDateTime("2000-06-15") });
            lst.Add(new Person{ PersonName = "Person 7", DateOfBirth = Convert.ToDateTime("2000-06-10") });
            lst.Add(new Person{ PersonName = "Person 8", DateOfBirth = Convert.ToDateTime("2000-08-21") });
 
		//then write filter code :
 		DateTime fromDate = DateTime.Parse("2055-06-15");
        DateTime toDate = DateTime.Parse("1015-08-20");
 
		var finalValue = from a in lst where (
					(a.DateOfBirth.Date.Month > fromDate.Date.Month || (a.DateOfBirth.Date.Month == fromDate.Date.Month && a.DateOfBirth.Date.Day >= fromDate.Date.Day) )
					&&
					(a.DateOfBirth.Date.Month < toDate.Date.Month || (a.DateOfBirth.Date.Month == toDate.Date.Month && a.DateOfBirth.Date.Day <= toDate.Date.Day))
				)
				select a;
		
		foreach( var p in finalValue){
			Console.WriteLine(p.PersonName);
		}
	}
}


Member 12133159

- Спасибо, Сэр...
Но скажите мне, как использовать мою собственную базу данных вместо этого списка для извлечения дней рождения, поскольку у меня есть около тысячи записей...

Sri Nivas (Vasu)

такое же условие можно использовать и в запросе sql server.

вы можете найти, как получить часть дня, часть месяца из данных в sql server

Рейтинг:
1

Bhavesh Chudasama

Мы сосредоточимся только на дне и месяце, чтобы не обращать внимания на конкретный год. Укажите любой год только для завершения значения даты (здесь я использовал 2016 год в качестве значения года).


SQL-запрос серверу, чтобы получить сведения о сотрудниках, имеющих день рождения в июле месяце:

Select * From tbl_EmployeeMaster 
Where Convert(Date, Convert(Varchar, Month(BirthDate)) + '/' + Convert(Varchar,Day(BirthDate)) + '/2016') Between '07/01/2016' And '07/31/2016' Order By BirthDate, EmployeeName


Рейтинг:
1

kananagaraj777

Где (месяц(BDate) >= DATEPART(месяц, '29-Oct-2019') и День(BDate) >= DATEPART(DD,'29-Oct-2019')) или (месяц(BDate) <= DATEPART(месяц,'02-Nov-2019') и День(BDate) <= DATEPART(DD,'02-Nov-2019'))


CHill60

Не так уж сильно отличается решение 5 от решения 4-летней давности. За исключением решения 5 более ясного и использует между