สอบถามวิธีสร้าง ID อัตโนมัติในเซิร์ฟเวอร์ sql ด้วยการรวมวันเดือนปี
มี 2คำถามครับ
1) คือผมทำการสร้าง IDอัตโนมัติ โดยการบันทึก วัน-เดือน-ปี ตามด้วยรหัส (2019062000001) มันจะทำการบวกไปเรื่อยๆ ดังโค้ดด้านล่าง
แต่ผมอยากให้มันเริ่มต้นที่ 00001 ใหม่ในทุกวันหรือทุกเดือน หรือมีวิธีอื่นแนะนำไหมครับ
Code (SQL)
+ cast(year(Getdate()) as nvarchar)
+ right('00' + cast(month(getdate()) as nvarchar), 2)
+ right('00' + cast(day(getdate()) as nvarchar), 2)
+ case when day(getdate()) = 1 then '0000'
else right('0000' + cast(isnull((select right(max(ReqNo), 4) + 1 from ReqInfo), 1) as nvarchar), 4)
end
2) ผมได้บันทึกข้อมูลโดยใช้ IDในลักษณะเดียวกันกับข้างบน เป็นการinsert ด้วยลูป for ซึ่งมันจะบวกID ไปเรื่อยๆตามจำนวนที่ส่งมา
แต่อยากให้ IDถูกรันเพียงครั้งเดียวต่อการบันทึกหนึ่งครั้ง เพื่อเอาไว้แสดงแบบเป็นกลุ่ม
Code (PHP)
for($i=0;$i<count($_POST["AS"]);$i++) {
if(trim($_POST["AS"][$i]) != "") {
$strSQL = "INSERT INTO ReqInfo (ReqNo, ReqType, EmployeeID, ReqDate, ReqHour, ReqMinute, ReqOTType, ReqIssuer, ReqIssueDate, Status) VALUES (
+ cast(year(Getdate()) as nvarchar)
+ right('00' + cast(month(getdate()) as nvarchar), 2)
+ right('00' + cast(day(getdate()) as nvarchar), 2)
+ case when day(getdate()) = 1 then '0000'
else right('0000' + cast(isnull((select right(max(ReqNo), 4) + 1 from ReqInfo), 1) as nvarchar), 4)
end
, '1', '".$_POST["AS"][$i]."', GETDATE(), '".$h."', '".$m."', '$TXTcode', '".$_SESSION['UserID']."', GETDATE(), '1')";
$objQuery = sqlsrv_query($conn, $strSQL)
or die ("Error Query [".$strSQL."]");
//or die( print_r( sqlsrv_errors(), true));
}
}
Tag : PHP, Ms SQL Server 2016
Date :
2019-06-20 16:41:58
By :
Hot
View :
993
Reply :
4
ยังทำไม่ได้เลยครับ เป็นเพราะของผมเป็น SQL Server หรือเปล่าครับ
แล้วถ้าใช้โค้ดนี้ ผมควรเพิ่มคำสั่งใดเข้าไปเพื่อให้รหัสมันเริ่มที่ 0001 ใหม่ในทุกเดือน
Code (SQL)
if day(getdate()) = 1
--truncate table Cnt_TrnDetail
else
insert Cnt_TrnDetail (TrnNo) values(
cast(year(Getdate()) as nvarchar)
+ right('00' + cast(month(getdate()) as nvarchar), 2)
+ right('00' + cast(day(getdate()) as nvarchar), 2)
+ case when day(getdate()) = 1 then '0000'
else right('0000' + cast(isnull((select right(max(TrnNo), 4) + 1 from Cnt_TrnDetail), 1) as nvarchar), 4)
end
)
Date :
2019-06-21 11:49:22
By :
็Hot
ลองอ่าน document ของคำสั่ง
strtotime()
จะใช้แปลงข้อความเกี่ยวกับวันที่เวลา ให้อยู่ในรูปแบบเวลา timestamp ซึ่งเป็น number
ที่เราสามารถนำไปใช้ในการเปรียบเทียบเวลา ได้
ถ้าวิเคราะห์การใช้คำสั่งถูกก็จะได้แนวทางเป็น
1.ดึงข้อมูลเดือนล่าสุดออกมา
2.เอาเดือนล่าสุดเปรียบเทียบกับเดือนที่บันทึกข้อมูล
เงื่อนไขก็จะเป็น
if(หากเดือนล่าสุดในฐานข้อมูลไม่ตรงกับเดือนที่บันทึกข้อมูล)
{
ให้ทำการกำหนดตัวเลขเป็น 0001
}else
//แต่ถ้าเดือนที่บันทึกข้อมูลตรงกันกับในระบบก็ให้เป็น
{
ให้ตัวเลขที่อยู่ในฐานข้อมูล +1
}
Date :
2019-06-25 16:06:17
By :
nobetaking
Load balance : Server 04