یه هوراا واسه صاح بکشید که زحمتش پایه اونه (البته صالح جان یه مشکل خیلی خیلی کوچیک توی یه فاصله داشتی و مشکل توی یه فاصله که بعد از CONCAT_WS داده بودی. mysql به فاصله خیلی حساس هست و به خاطر همین تابع CONCAT_WS که بعدش فاصله باشه رو نمیشناسه)
توسط این کد شما می تونین از تابع g2j استفاده کنین.
کد به صورت زیر هست
روش استفاده هم به این صورت هست
اول باید وارد دیتابیس بشید و بعد این کدها رو اجرا کنید (توی هر دیتابیسی که کد بالا رو بزنین این تابع قابل دسترسی هست بعد مثلا داخل جدول iranphptable یه ستون date دارین به اسم iranphpdate حالا کدتون اینجوری میشه
دوستان اگر توابع دیگه ای هم می خوان اعلام کنن تا ببینیم میشه روش کار کرد
از صالح عزیز بسیار سپاسگذارم
توسط این کد شما می تونین از تابع g2j استفاده کنین.
کد به صورت زیر هست
کد پیاچپی:
DROP FUNCTION IF EXISTS `g_days_in_month`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `g_days_in_month`(`m` smallint) RETURNS smallint(2)
BEGIN
CASE m
WHEN 0 THEN RETURN 31;
WHEN 1 THEN RETURN 28;
WHEN 2 THEN RETURN 31;
WHEN 3 THEN RETURN 30;
WHEN 4 THEN RETURN 31;
WHEN 5 THEN RETURN 30;
WHEN 6 THEN RETURN 31;
WHEN 7 THEN RETURN 31;
WHEN 8 THEN RETURN 30;
WHEN 9 THEN RETURN 31;
WHEN 10 THEN RETURN 30;
WHEN 11 THEN RETURN 31;
END CASE;
END;;
DELIMITER ;
-- ----------------------------
-- Function structure for `g2j`
-- ----------------------------
DROP FUNCTION IF EXISTS `g2j`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `g2j`(`gdate` datetime) RETURNS char(10) CHARSET utf8
BEGIN
DECLARE i, gy, gm, gd,g_day_no,j_day_no, j_np,jy,jm,jd INT DEFAULT 0;
DECLARE resout char(10);
SET gy = YEAR(gdate)-1600;
SET gm = MONTH(gdate)-1;
SET gd = DAY(gdate)-1;
SET g_day_no = ((365 * gy) + mydiv( gy+3, 4 ) - mydiv( gy+99 , 100 )+ mydiv ( gy+399, 400 ) );
SET i = 0;
WHILE (i < gm) do
SET g_day_no = g_day_no + g_days_in_month(i);
SET i = i+1;
end WHILE;
if gm > 1 and (( gy% 4 = 0 and gy%100 <> 0 )) or gy % 400 = 0 THEN
SET g_day_no = g_day_no +1;
end IF;
set g_day_no = g_day_no + gd;
SET j_day_no = g_day_no -79;
SET j_np = j_day_no DIV 12053;
set j_day_no = j_day_no % 12053;
SET jy = 979+33*j_np+4*mydiv(j_day_no,1461);
set j_day_no = j_day_no % 1461;
if j_day_no >= 366 then
SET jy = jy + mydiv(j_day_no-1, 365);
SET j_day_no =( j_day_no-1) % 365;
end if;
SET i = 0;
WHILE ( i < 11 and j_day_no >= j_days_in_month(i) ) do
SET j_day_no = j_day_no - j_days_in_month(i);
SET i = i+1;
end WHILE;
SET jm = i+1;
SET jd = j_day_no+1;
SET resout=CONCAT_WS('-',jy,jm,jd);
RETURN resout;
END;;
DELIMITER ;
-- ----------------------------
-- Function structure for `j_days_in_month`
-- ----------------------------
DROP FUNCTION IF EXISTS `j_days_in_month`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `j_days_in_month`(`m` smallint) RETURNS smallint(2)
BEGIN
CASE m
WHEN 0 THEN RETURN 31;
WHEN 1 THEN RETURN 31;
WHEN 2 THEN RETURN 31;
WHEN 3 THEN RETURN 31;
WHEN 4 THEN RETURN 31;
WHEN 5 THEN RETURN 31;
WHEN 6 THEN RETURN 30;
WHEN 7 THEN RETURN 30;
WHEN 8 THEN RETURN 30;
WHEN 9 THEN RETURN 30;
WHEN 10 THEN RETURN 30;
WHEN 11 THEN RETURN 29;
END CASE;
END;;
DELIMITER ;
-- ----------------------------
-- Function structure for `mydiv`
-- ----------------------------
DROP FUNCTION IF EXISTS `mydiv`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `mydiv`(`a` int,`b` int) RETURNS int(11)
BEGIN
return FLOOR( a / b);
END;;
DELIMITER ;
روش استفاده هم به این صورت هست
اول باید وارد دیتابیس بشید و بعد این کدها رو اجرا کنید (توی هر دیتابیسی که کد بالا رو بزنین این تابع قابل دسترسی هست بعد مثلا داخل جدول iranphptable یه ستون date دارین به اسم iranphpdate حالا کدتون اینجوری میشه
کد پیاچپی:
select g2j(iranphpdate) as persiandate from iranphptable
دوستان اگر توابع دیگه ای هم می خوان اعلام کنن تا ببینیم میشه روش کار کرد
از صالح عزیز بسیار سپاسگذارم