 |
|
|
 |
 |
|
เอ้าาา ซ่ะงั้น งั้นไปดูเรื่อง
string s = "20100010001";
s.Substring(int startIndex, int length);
System.Convert.ToInt32(string val);
s = "2010" + "001" + "0001";
...
|
 |
 |
 |
 |
Date :
2010-03-22 11:07:22 |
By :
numenoy |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลืมบอกไป ผมเขียนเป็นภาษา VB.NET ไม่ใช่ C# อ่ะ รบกวนช่วยตั้งแต่เริ่มตรวจสอบข้อมูลเลยได้มั้ยครับว่ามันมีข้อมูล LIKE กันยังไง
แล้วถ้ามัน LIKE กัน จะใช้เงื่อนไขไหนมากตัด String แล้วเอาส่วนไหนไป บวกเพิ่ม ครับ
นั่นแหละผมมึนๆ งง สับสนไปหมดแล้ว รบกวนด้วยนะครับ
|
 |
 |
 |
 |
Date :
2010-03-22 12:02:59 |
By :
sonmy |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|

อันนี้ลองเขียนด้วย T-SQL ของ MSSQL ดูค่ะ
จะได้ตัดปัญหา VB.NET หรือ C# โยนการ Process ขึ้นบน SQL SERVER
แน่นอนว่า T-SQL จะเร็วกว่า CLR CODE ของ .NET อยู่แล้วค่ะ
เอาไว้ถ้ายังไม่มีตัวอย่างอื่นละกัน หรือจะลองดัดแปลงดูก็ได้นะคะ แก้แค่ชื่อ field กับชื่อ table ใน
[dbo].[GET_NEW_RUNNING_NUMBER_EX] เท่านั้น
Code (C#)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ==========================================================
-- Author: PROUD ,PNK.RJB U.
-- Create date: 02/12/2009
-- Description: PREFIX STRING WITH SPECIFIC CHARACTOR
-- ==========================================================
ALTER FUNCTION [dbo].[LPAD] (@VAR_STR NVARCHAR(MAX)
,@VAR_LENGTH INT ,@VAR_FILL_CHAR NVARCHAR(1))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE
@TEMP INT ,
@COUNTER INT ,
@RETSTR NVARCHAR(MAX) ;
SET @TEMP = @VAR_LENGTH - LEN(@VAR_STR);
SET @RETSTR = @VAR_STR ;
IF (@TEMP>0)
BEGIN
SET @COUNTER = 0;
WHILE (@COUNTER < @TEMP)
BEGIN
SET @RETSTR = @VAR_FILL_CHAR + @RETSTR ;
SET @COUNTER = @COUNTER +1 ;
END
END
RETURN @RETSTR
END
Code (C#)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: PROUD ,PNK.RJB U.
-- Create date: 22/03/2010
-- Description: GET NEW RUNNING NUMBER MAIN FUNCTION
-- =============================================
CREATE FUNCTION [dbo].[GET_NEW_RUNNING_NUMBER_EX]
(
@VAR_YEAR INT ,
@VAR_DEPARTMENT INT ,
@VAR_DEPARTMENT_LENGTH INT ,
@VAR_COUNTER_LENGTH INT ,
@VAR_COUNTER_MAX_VALUE INT
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE
@DATA_YEAR INT ,
@DATA_DEPARTMENT INT ,
@DATA_COUNTER INT ,
@RET_STR NVARCHAR(MAX) ,
@CAP_ID NVARCHAR(MAX) ,
@TEMP_STR NVARCHAR(MAX) ,
@FOUNDED INT ,
@CONST_DEPAREMRNT_LENGTH INT ,
@CONST_COUNTER_LENGTH INT ,
@CONST_MAX_COUNTER INT ;
SET @CONST_DEPAREMRNT_LENGTH = @VAR_DEPARTMENT_LENGTH ;
SET @CONST_COUNTER_LENGTH = @VAR_COUNTER_LENGTH ;
SET @CONST_MAX_COUNTER = @VAR_COUNTER_MAX_VALUE ;
SET @DATA_YEAR = @VAR_YEAR ;
SET @DATA_DEPARTMENT = @VAR_DEPARTMENT ;
SET @CAP_ID = CONVERT(NVARCHAR(MAX) ,@DATA_YEAR)
+ dbo.LPAD(CONVERT( NVARCHAR(MAX) ,@DATA_DEPARTMENT )
,@CONST_DEPAREMRNT_LENGTH ,'0') ;
SET @TEMP_STR = @CAP_ID + '%';
SELECT @RET_STR = ISNULL(MAX(Label),'')
FROM _test_max_value WHERE Label LIKE @TEMP_STR;
-- 4 debug
---SET @RET_STR = '201060123007' ;
SET @DATA_COUNTER = 0 ;
IF (LEN(@RET_STR) = (4+ @CONST_DEPAREMRNT_LENGTH + @CONST_COUNTER_LENGTH) )
BEGIN
SET @RET_STR = SUBSTRING(@RET_STR
,LEN(@TEMP_STR) ,LEN(@RET_STR) - LEN(@CAP_ID)+1 );
SET @DATA_COUNTER = CONVERT(INT ,@RET_STR) ;
END
SET @DATA_COUNTER = @DATA_COUNTER + 1 ;
-- Check with maximum value
IF (@DATA_COUNTER > @CONST_MAX_COUNTER )
BEGIN
SET @DATA_COUNTER = 1 ;
END
-- Compose ID
SET @RET_STR = @CAP_ID
+ dbo.LPAD(CONVERT(NVARCHAR(MAX) ,@DATA_COUNTER)
,@CONST_COUNTER_LENGTH ,'0');
RETURN @RET_STR
END
GO
Code (C#)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =====================================================================
-- Author: PROUD ,PNK.RJB U.
-- Create date: 22/03/2010
-- Description: GET NEW RUNNING NUMBER SHORT VERSION > EMULATE C# OVERLOAD
-- =====================================================================
CREATE FUNCTION [dbo].[GET_NEW_RUNNING_NUMBER]
(
@VAR_YEAR INT ,
@VAR_DEPARTMENT INT
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN dbo.GET_NEW_RUNNING_NUMBER_EX
( @VAR_YEAR ,@VAR_DEPARTMENT ,3 ,5 ,99999)
END
GO
การใช้งาน
ExecuteScalar ด้วย Command นี้ค่ะ
SELECT [dbo].[GET_NEW_RUNNING_NUMBER](2010 ,1) ;
|
 |
 |
 |
 |
Date :
2010-03-22 14:18:04 |
By :
blurEye |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
งงครับคุณ Stupid girl รบกวนอธิบายทีนะครับ
|
 |
 |
 |
 |
Date :
2010-03-22 15:09:31 |
By :
sonmy |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอา function ของคุณ blurEye ไป query
แล้วลอง ใช้ sql management studio query คำสั่งนี้
SELECT [dbo].[GET_NEW_RUNNING_NUMBER](2010 ,1) ;
เผื่อจะเข้าใจอะนะ
|
 |
 |
 |
 |
Date :
2010-03-22 15:16:34 |
By :
plakrim |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คุณต้องบอกมาว่า เจ้า running number นี่เอาไปใช้งานตรงส่วนไหน
จาก table ,field อะไรบ้าง แล้วค่าต่างๆเช่น ปี หรือ สาขา นี่คุณกำหนดจากอะไร
จะได้ตรงกับความต้องการค่ะ
code ที่ให้เป็น Scalar function ของ MSSQL ค่ะ
เอาไปรัน ตามที่พี่ปรากริมบอกแล้วจะมี function เพิ่มขึ้นมา
ซึ่งก้อเดาเอาว่าคุณใช้ MSSQL ใช่ป่าวคะ
|
 |
 |
 |
 |
Date :
2010-03-22 17:25:56 |
By :
blurEye |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ครับ ใช้ SQL Server แต่เป็น V.2000 นะ รันนิ่งนัมเบอร์เนี้ยะผมจะเอาไปใช้เป็นเลขที่รันนิ่งสัญญา ตามปี
ถ้าเป็นปี 2010 ก็เป็น 2010+รหัสสาขาซึ่งมีอยู่ใน Table สาขา + แล้วก็เลขรันนิ่งอีก 3 หลัก
จะได้ป็น 2010012001 ประมาณนี้ครับ แต่รหัสสาขานั้นน่ะต้องมีการเลือกจะ Dropdownlist ในส่วนของสาขาก่อน เพราะไม่งั้นจะแยกสาขาไม่ได้
หวังว่าคงเข้าในนะครับ
|
 |
 |
 |
 |
Date :
2010-03-23 09:00:51 |
By :
sonmy |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เสียใจที่สุด ผมยิ่งเป็นคนอธิบายไม่รู้เรื่องด้วยดิ
เสียใจ
|
 |
 |
 |
 |
Date :
2010-03-23 10:47:40 |
By :
sonmy |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|