วันจันทร์ที่ 29 มิถุนายน พ.ศ. 2552

How to extract Year, Month, Day, Hour, Minute and Seconds from a DateTime

DATEPART ( datepart , date ) where
datepart - specifies the part of the date to return. For eg: year, month and so on
date - is the datetime or smalldatetime value

QUERY

SELECT
DATEPART(year, GETDATE()) as 'Year',
DATEPART(month,GETDATE()) as 'Month',
DATEPART(day,GETDATE()) as 'Day',
DATEPART(week,GETDATE()) as 'Week',
DATEPART(hour,GETDATE()) as 'Hour',
DATEPART(minute,GETDATE()) as 'Minute',
DATEPART(second,GETDATE()) as 'Seconds',
DATEPART(millisecond,GETDATE()) as 'MilliSeconds'

Note: When using a smalldatetime, only information up to the 'minute' gets displayed. Seconds and milliseconds are always 0.

Standard Date Formats
Date Format Standard SQL Statement Sample Output
Mon DD YYYY 1
HH:MIAM (or PM)
Default SELECT CONVERT(VARCHAR(20), GETDATE(), 100) Jan 1 2005 1:29PM 1
MM/DD/YY USA SELECT CONVERT(VARCHAR(8), GETDATE(), 1) AS [MM/DD/YY] 11/23/98
MM/DD/YYYY USA SELECT CONVERT(VARCHAR(10), GETDATE(), 101) AS [MM/DD/YYYY] 11/23/1998
YY.MM.DD ANSI SELECT CONVERT(VARCHAR(8), GETDATE(), 2) AS [YY.MM.DD] 72.01.01
YYYY.MM.DD ANSI SELECT CONVERT(VARCHAR(10), GETDATE(), 102) AS [YYYY.MM.DD] 1972.01.01
DD/MM/YY British/French SELECT CONVERT(VARCHAR(8), GETDATE(), 3) AS [DD/MM/YY] 19/02/72
DD/MM/YYYY British/French SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS [DD/MM/YYYY] 19/02/1972
DD.MM.YY German SELECT CONVERT(VARCHAR(8), GETDATE(), 4) AS [DD.MM.YY] 25.12.05
DD.MM.YYYY German SELECT CONVERT(VARCHAR(10), GETDATE(), 104) AS [DD.MM.YYYY] 25.12.2005
DD-MM-YY Italian SELECT CONVERT(VARCHAR(8), GETDATE(), 5) AS [DD-MM-YY] 24-01-98
DD-MM-YYYY Italian SELECT CONVERT(VARCHAR(10), GETDATE(), 105) AS [DD-MM-YYYY] 24-01-1998
DD Mon YY 1 - SELECT CONVERT(VARCHAR(9), GETDATE(), 6) AS [DD MON YY] 04 Jul 06 1
DD Mon YYYY 1 - SELECT CONVERT(VARCHAR(11), GETDATE(), 106) AS [DD MON YYYY] 04 Jul 2006 1
Mon DD, YY 1 - SELECT CONVERT(VARCHAR(10), GETDATE(), 7) AS [Mon DD, YY] Jan 24, 98 1
Mon DD, YYYY 1 - SELECT CONVERT(VARCHAR(12), GETDATE(), 107) AS [Mon DD, YYYY] Jan 24, 1998 1
HH:MM:SS - SELECT CONVERT(VARCHAR(8), GETDATE(), 108) 03:24:53
Mon DD YYYY HH:MI:SS:MMMAM (or PM) 1 Default +
milliseconds
SELECT CONVERT(VARCHAR(26), GETDATE(), 109) Apr 28 2006 12:32:29:253PM 1
MM-DD-YY USA SELECT CONVERT(VARCHAR(8), GETDATE(), 10) AS [MM-DD-YY] 01-01-06
MM-DD-YYYY USA SELECT CONVERT(VARCHAR(10), GETDATE(), 110) AS [MM-DD-YYYY] 01-01-2006
YY/MM/DD - SELECT CONVERT(VARCHAR(8), GETDATE(), 11) AS [YY/MM/DD] 98/11/23
YYYY/MM/DD - SELECT CONVERT(VARCHAR(10), GETDATE(), 111) AS [YYYY/MM/DD] 1998/11/23
YYMMDD ISO SELECT CONVERT(VARCHAR(6), GETDATE(), 12) AS [YYMMDD] 980124
YYYYMMDD ISO SELECT CONVERT(VARCHAR(8), GETDATE(), 112) AS [YYYYMMDD] 19980124
DD Mon YYYY HH:MM:SS:MMM(24h) 1 Europe default + milliseconds SELECT CONVERT(VARCHAR(24), GETDATE(), 113) 28 Apr 2006 00:34:55:190 1
HH:MI:SS:MMM(24H) - SELECT CONVERT(VARCHAR(12), GETDATE(), 114) AS [HH:MI:SS:MMM(24H)] 11:34:23:013
YYYY-MM-DD HH:MI:SS(24h) ODBC Canonical SELECT CONVERT(VARCHAR(19), GETDATE(), 120) 1972-01-01 13:42:24
YYYY-MM-DD HH:MI:SS.MMM(24h) ODBC Canonical
(with milliseconds)
SELECT CONVERT(VARCHAR(23), GETDATE(), 121) 1972-02-19 06:35:24.489
YYYY-MM-DDTHH:MM:SS:MMM ISO8601 SELECT CONVERT(VARCHAR(23), GETDATE(), 126) 1998-11-23T11:25:43:250
DD Mon YYYY HH:MI:SS:MMMAM 1 Kuwaiti SELECT CONVERT(VARCHAR(26), GETDATE(), 130) 28 Apr 2006 12:39:32:429AM 1
DD/MM/YYYY HH:MI:SS:MMMAM Kuwaiti SELECT CONVERT(VARCHAR(25), GETDATE(), 131) 28/04/2006 12:39:32:429AM


Here are some more date formats that does not come standard in SQL Server as part of the CONVERT function.

Extended Date Formats
Date Format SQL Statement Sample Output
YY-MM-DD
SELECT SUBSTRING(CONVERT(VARCHAR(10), GETDATE(), 120), 3, 8) AS [YY-MM-DD]
SELECT REPLACE(CONVERT(VARCHAR(8), GETDATE(), 11), '/', '-') AS [YY-MM-DD]
99-01-24
YYYY-MM-DD
SELECT CONVERT(VARCHAR(10), GETDATE(), 120) AS [YYYY-MM-DD]
SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 111), '/', '-') AS [YYYY-MM-DD]
1999-01-24
MM/YY SELECT RIGHT(CONVERT(VARCHAR(8), GETDATE(), 3), 5) AS [MM/YY]
SELECT SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 3), 4, 5) AS [MM/YY]
08/99
MM/YYYY SELECT RIGHT(CONVERT(VARCHAR(10), GETDATE(), 103), 7) AS [MM/YYYY] 12/2005
YY/MM SELECT CONVERT(VARCHAR(5), GETDATE(), 11) AS [YY/MM] 99/08
YYYY/MM SELECT CONVERT(VARCHAR(7), GETDATE(), 111) AS [YYYY/MM] 2005/12
Month DD, YYYY 1 SELECT DATENAME(MM, GETDATE()) + RIGHT(CONVERT(VARCHAR(12), GETDATE(), 107), 9) AS [Month DD, YYYY] July 04, 2006 1
Mon YYYY 1 SELECT SUBSTRING(CONVERT(VARCHAR(11), GETDATE(), 113), 4, 8) AS [Mon YYYY] Apr 2006 1
Month YYYY 1 SELECT DATENAME(MM, GETDATE()) + ' ' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) AS [Month YYYY] February 2006 1
DD Month 1 SELECT CAST(DAY(GETDATE()) AS VARCHAR(2)) + ' ' + DATENAME(MM, GETDATE()) AS [DD Month] 11 September 1
Month DD 1 SELECT DATENAME(MM, GETDATE()) + ' ' + CAST(DAY(GETDATE()) AS VARCHAR(2)) AS [Month DD] September 11 1
DD Month YY 1 SELECT CAST(DAY(GETDATE()) AS VARCHAR(2)) + ' ' + DATENAME(MM, GETDATE()) + ' ' + RIGHT(CAST(YEAR(GETDATE()) AS VARCHAR(4)), 2) AS [DD Month YY] 19 February 72 1
DD Month YYYY 1 SELECT CAST(DAY(GETDATE()) AS VARCHAR(2)) + ' ' + DATENAME(MM, GETDATE()) + ' ' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) AS [DD Month YYYY] 11 September 2002 1
MM-YY SELECT RIGHT(CONVERT(VARCHAR(8), GETDATE(), 5), 5) AS [MM-YY]
SELECT SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 5), 4, 5) AS [MM-YY]
12/92
MM-YYYY SELECT RIGHT(CONVERT(VARCHAR(10), GETDATE(), 105), 7) AS [MM-YYYY] 05-2006
YY-MM SELECT RIGHT(CONVERT(VARCHAR(7), GETDATE(), 120), 5) AS [YY-MM]
SELECT SUBSTRING(CONVERT(VARCHAR(10), GETDATE(), 120), 3, 5) AS [YY-MM]
92/12
YYYY-MM SELECT CONVERT(VARCHAR(7), GETDATE(), 120) AS [YYYY-MM] 2006-05
MMDDYY SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 1), '/', '') AS [MMDDYY] 122506
MMDDYYYY SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 101), '/', '') AS [MMDDYYYY] 12252006
DDMMYY SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 3), '/', '') AS [DDMMYY] 240702
DDMMYYYY SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 103), '/', '') AS [DDMMYYYY] 24072002
Mon-YY 1 SELECT REPLACE(RIGHT(CONVERT(VARCHAR(9), GETDATE(), 6), 6), ' ', '-') AS [Mon-YY] Sep-02 1
Mon-YYYY 1 SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-') AS [Mon-YYYY] Sep-2002 1
DD-Mon-YY 1 SELECT REPLACE(CONVERT(VARCHAR(9), GETDATE(), 6), ' ', '-') AS [DD-Mon-YY] 25-Dec-05 1
DD-Mon-YYYY 1 SELECT REPLACE(CONVERT(VARCHAR(11), GETDATE(), 106), ' ', '-') AS [DD-Mon-YYYY] 25-Dec-2005 1

1 To make the month name in upper case, simply use the UPPER string function.

Credit : http://www.sql-server-helper.com/tips/date-formats.aspx



วันอังคารที่ 9 มิถุนายน พ.ศ. 2552

Keyword : Me

Me

The Me keyword provides a way to refer to the specific instance of a class or structure in which the code is currently executing. Me behaves like either an object variable or a structure variable referring to the current instance. Using Me is particularly useful for passing information about the currently executing instance of a class or structure to a procedure in another class, structure, or module. For example, suppose you have the following procedure in a module:

Sub ChangeFormColor(ByVal FormName As Form)
Randomize()
FormName.BackColor = Color.FromArgb(Rnd() * 256, Rnd() * 256, Rnd() * 256)
End Sub

You can call this procedure and pass the current instance of the Form class as an argument using the following statement:

ChangeFormColor(Me)

The Me keyword is used in these contexts:


ที่มา : http://msdn.microsoft.com/en-us/library/7e58sbke(VS.71).aspx

>>Visual Basic Language Keywords here<<


DateTimePicker : แสดงเวลาย้อนหลัง

DateTimePicker1.Value = Date.Today.AddDays(-5) 'แสดงวันย้อนหลังไป 5 วัน
DateTimePicker1.Value = Date.Today.AddHours(-5)
DateTimePicker1.Value = Date.Today.AddMilliseconds(-5)
DateTimePicker1.Value = Date.Today.AddMinutes(-5)
DateTimePicker1.Value = Date.Today.AddMonths(-5) 'แสดงเดือนย้อนหลังไป 5 เดือน
DateTimePicker1.Value = Date.Today.AddSeconds(-5)
DateTimePicker1.Value = Date.Today.AddTicks(-5)
DateTimePicker1.Value = Date.Today.AddYears(-5) 'แสดงปีย้อนหลังไป 5 ปี


วันพฤหัสบดีที่ 2 เมษายน พ.ศ. 2552

เมื่อต้องการให้ SelectMode ทำได้ทั้งแถวและคอลัมน์ >>>DataGridView.RowHeaderMouseClick

Private Sub dataGridView1_ColumnHeaderMouseClick( _
ByVal sender As Object, ByVal e As DataGridViewCellMouseEventArgs) _
Handles dataGridView1.ColumnHeaderMouseClick

Me.dataGridView1.SelectionMode = _
DataGridViewSelectionMode.ColumnHeaderSelect
Me.dataGridView1.Columns(e.ColumnIndex).HeaderCell _
.SortGlyphDirection = SortOrder.None
Me.dataGridView1.Columns(e.ColumnIndex).Selected = True

End Sub

Private Sub dataGridView1_RowHeaderMouseClick( _
ByVal sender As Object, ByVal e As DataGridViewCellMouseEventArgs) _
Handles dataGridView1.RowHeaderMouseClick

Me.dataGridView1.SelectionMode = _
DataGridViewSelectionMode.RowHeaderSelect
Me.dataGridView1.Rows(e.RowIndex).Selected = True

End Sub

Credit: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowheadermouseclick.aspx


วันพฤหัสบดีที่ 26 มีนาคม พ.ศ. 2552

Index was out of range. Must be non-negative and less than the size of the collection

error msg : Index was out of range. Must be non-negative and less than the size of the collection.

ปัญหา : ขณะที่ผูก datasource เข้ากับ datagridview จะมีเรียกอีเวนต์ _RowEnter ทำงานอัตโนมัติ แต่เรายังไม่ได้คลิกเลือกใน datagridview หรือไม่เกิดการ SelectedRows() ดังนั้นค่า index ที่ใน SelectedRow(0) ที่เรากำหนดในอีเวนต์ _RowEnter จึงอ้างอิงผิดพลาด

สาเหตุ : เกิดภายใต้อีเวนต์ DataGridView_RowEnter ซึ่งเราได้กำหนดให้มีการทำงานดังนี้
***SelectedRow(0) <--- ขณะที่เรายังไม่ได้เลือกจริงๆ ใน datagridview
-----------------------------------------------------------------------------------------
Private Sub DataGridView_RowEnter(....)
txtPileID.Text = dgvPile.SelectedRows(0).Cells("colCode").Value.ToString
End Sub
-----------------------------------------------------------------------------------------
แก้ไข : ภายในอีเวนต์ DataGridView_RowEnter ให้ตรวจสอบก่อนว่าได้เกิดการเลือก Row ใน DataGridView หรือยัง??
-----------------------------------------------------------------------------------------
Private Sub DataGridView_RowEnter(....)
If Not
DataGridView.SelectedRows.Count = 0 Then
txtPileID.Text = dgvPile.SelectedRows(0).Cells("colCode").Value.ToString
Else
Exit Sub
End If
End Sub
-----------------------------------------------------------------------------------------


วันพฤหัสบดีที่ 19 มีนาคม พ.ศ. 2552

Date Time without time in SQL

เมื่อต้องการเฉพาะวันที่แต่ไม่เอาเวลามาด้วย :

Select Convert (varchar(12),getdate(),101) --> 03/19/2009

Select Convert (varchar(12),getdate(),1) --> 03/19/09

The 101 means “mm/dd/yyyy” format, but there are a bunch of other codes you can use. 108 will return just the time “hh:mm:ss” for instance.


วันพุธที่ 18 มีนาคม พ.ศ. 2552

Get Table Names in SQL

Use the following for user tables
----------------------------------------------
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U'
ORDER BY dbo.sysobjects.name
----------------------------------------------
some other types are:
'V' - views
'S' - system tables


วันอังคารที่ 17 มีนาคม พ.ศ. 2552

To reset auto increment

ก่อนอื่นต้องลบข้อมูลในตารางก่อนนะครับแล้วรันคำสั่งนี้....

DBCC CHECKIDENT
('table_name', RESEED, 0) ;
GO

ใส่ชื่อตารางตรง
table_name


วันพุธที่ 4 มีนาคม พ.ศ. 2552

Add data to datagridview

Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdd.Click
Dim RowArray() As String = _
{txtCode.Text, txtName.Text, "", txtQty.Text}
DataGridView1.Rows.Add(RowArray)
End Sub


Get column names from MSSQL

-------------------------------------------------------------------------------------------------------
มันจะดึงมาทั้งดาต้าเบสเลยคับ ผมก็เอาไปปะใน Excel อีกทีแล้วค่อยกรองเอาตารางที่ต้องการแสดงผล...

SELECT table_name=sysobjects.name,
column_name=syscolumns.name,
datatype=systypes.name,
length=syscolumns.length
FROM sysobjects
JOIN syscolumns ON sysobjects.id = syscolumns.id
JOIN systypes ON syscolumns.xtype=systypes.xtype
WHERE sysobjects.xtype='U'
ORDER BY sysobjects.name,syscolumns.colid
-------------------------------------------------------------------------------------------------------
ถ้าต้องการแค่ table ใดๆ 'table_name' ใส่ชื่อตารางที่ต้องการได้เลย

SELECT * FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = 'table_name'
-------------------------------------------------------------------------------------------------------







วันอังคารที่ 3 กุมภาพันธ์ พ.ศ. 2552

Login Form VB.NET 01

Dim MyDS As New DataSet
Dim conns As String = "Data Source=ISAAC;Initial Catalog=SETH;Integrated Security=True"
Dim Conn As New SqlConnection
Conn.ConnectionString = conns

Dim Cmd As SqlDataAdapter
Cmd = New SqlDataAdapter("select * from login where username='" & Trim(C1TextBox1.Text) & "' and password='" & TRIM(C1TextBox2.Text)& "'", Conn)

Cmd.Fill(MyDS, "login")
Dim table As DataTable = MyDS.Tables("login")
Dim i As Integer
Dim j As Integer
if ( table.Rows.Count= 1)
Form1
.Show()
Me.Close()

Else
MsgBox("Incorrect Login")
C1TextBox1
.Focus()
End If

-----------------------------------------------------------------------------------------------------
As a side note:
You sql statement is susceptible to SQL
injection. Unless you are doing some sort of sanitizing on your textbox
input, you should consider using
parameters in your queries.

For instance, if I were to type
x' or 1 = 1; --
in your textbox, I have just bypassed your login procedure (because 1 = 1 will always evaluate true and thus return all rows).
You should use command parameters as demonstrated in the snippet.
-----------------------------------------------------------------------------------------------------
Dim adapter As System.Data.SqlClient.SqlDataAdapter
Dim cmd As New System.Data.SqlClient.SqlCommand("Select * from login where username = @user and password = @pass")

cmd
.Parameters.Add(New System.Data.SqlClient.SqlParameter("@user", ClTextBox1.Text.Trim()))
cmd
.Parameters.Add(New System.Data.SqlClient.SqlParameter("@pass", ClTextBox2.Text.Trim()))

adapter
= New System.Data.SqlClient.SqlDataAdapter(cmd)
-----------------------------------------------------------------------------------------------------


Login Form VB.NET 02

This code demonstrates how to retrieve the username of the current windows user in VB.NET

Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, _
ByRef nSize As Integer) As Integer

Public Function GetUserName() As String
Dim iReturn As Integer
Dim userName As String
userName = New String(CChar(" "), 50)
iReturn = GetUserName(userName, 50)
GetUserName = userName.Substring(0, userName.IndexOf(Chr(0)))
End Function

credit : http://www.developerfusion.com/code/4409/get-current-username-in-vbnet/

more : http://www.programmersheaven.com/mb/VBNET/372574/372574/how-to-do-username-and-password-problem-in-vbnet/?S=B20000

http://www.vb-helper.com/howto_net_password_db.html

http://www.thaiadmin.org/board/index.php?topic=75951.0;imode

อันนี่น่าสนใจดี... http://msforums.ph/forums/t/41200.aspx

Active Directory and VB.NET http://thaieasy2web.blogspot.com/2008/08/active-directory-and-vbnet.html

login login form with vb.net : how to verify ?http://www.dreamincode.net/forums/showtopic11117.htm


วันจันทร์ที่ 2 กุมภาพันธ์ พ.ศ. 2552

การประกาศตัวแปรใน Crystal Report

Variable Declarations

Before we can use a variable in a formula, it has to be declared. Basic and Crystal Syntax both have different ways of declaring variables, based on the type and scope of the variable. The most common variable declarations are included below:

Crystal Report สามารถ ประกาศตัวแปร ได้ 2 ภาษา คือ Basic และ Crystal โดยมีการเปรียบเทียบ ดังตารางข้างล่างนี้

Basic

Crystal

Dim x

n/a

Dim x ()

n/a

Dim x As Boolean

Local BooleanVar x

Dim x As Number

Local NumberVar x

Dim x As Currency

Local CurrencyVar x

Dim x As Date

Local DateVar x

Dim x As Time

Local TimeVar x

Dim x As DateTime

Local DateTimeVar x

Dim x As String

Local StringVar x

Dim x As Number Range

Local NumberVar range x

Dim x As Currency Range

Local CurrencyVar range x

Dim x As Date Range

Local DateVar range x

Dim x As Time Range

Local TimeVar range x

Dim x As DateTime Range

Local DateTimeVar range x

Dim x As String Range

Local StringVar range x

Dim x () As Boolean

Local BooleanVar array x

Dim x () As Number

Local NumberVar array x

Dim x () As Currency

Local CurrencyVar array x

Dim x () As Date

Local DateVar array x

Dim x () As Time

Local TimeVar array x

Dim x () As DateTime

Local DateTimeVar array x

Dim x () As String

Local StringVar array x

Dim x () As Number Range

Local NumberVar range array x

Dim x () As Currency Range

Local CurrencyVar range array x

Dim x () As Date Range

Local DateVar range array x

Dim x () As Time Range

Local TimeVar range array x

Dim x () As DateTime Range

Local DateTimeVar range array x

Dim x () As String Range

Local StringVar range array x

To select a scope for variables created in Basic syntax, you can use the following scope attributes in place of the Dim statement:

การเลือกใช้ตัวแปร หรือชนิดของตัวแปร จะมีข้อกำหนด หรือข้อจำกัด ของการประกาศค่า

  • Local - The variable is specific and can only be used in the formula in which it is defined. เป็นตัวแปรแบบ Local ใช้ใน Local ได้อย่างเดียว

  • Global - The variable is available to formulas throughout the entire current report. เป็นตัวแบบ Global การประกาศตัวแปรนี้ สามารถมองเห็นได้ทั้ง Report

  • Shared - The variable can be shared with a subreport as well as the entire current report. เป็นตัวแปรแบบ Shared ซึ่งส่วนมากจะให้กับ Subreport

Credit : http://theera.exteen.com/20060831/variable-declarations


การ JOIN แบบต่างๆ

SQL JOINS
SQL joins are used to query data from two or more tables, based on a relationship between certain columns in these tables.

การ join ประเภทต่างๆ เพื่อคิวรี่ข้อมูลจากตารางมากกว่า 2 ตารางขึ้นไป ขึ้นอยู่กับความสัมพันธ์ระหว่างคอลัมน์ที่ีมีอยู่ในตารางที่จะนำมา join กัน


Tables in a database are often related to each other with keys.
ตารางในฐานข้อมูลมักจะมีความสัมพันธ์กับตารางอื่นด้วย keys ของตาราง

A primary key is a column (or a combination of columns) with a unique value for each row. Each primary key value must be unique within the table. The purpose is to bind data together, across tables, without repeating all of the data in every table.
Primary Key ก็คือคอลัมน์ที่มีค่าไม่ซ้ำกันในแต่ละแถวของตารางนั้นๆ วัตถุประสงค์ก็เพื่อผูกข้อมูล(bind data) เข้าด้วยกัน ข้ามตาราง โดยที่ไม่มีการซ้ำกันของข้อมูลในทุกๆ ตาราง

Look at the "Persons" table:
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Note that the "P_Id" column is the primary key in the "Persons" table. This means that no two rows can have the same P_Id. The P_Id distinguishes two persons even if they have the same name.
คอลัมน์ "P_Id" เป็น Primary Key ของตาราง "Persons" นั้นหมายความว่าจะไม่มีแถวใดๆ เลยที่มีค่าซ้ำหรือเหมือนกันกับแถวอื่น P_Id จะทำแยกระหว่างคนสองคนถึงแม้จะมีชื่อเหมือนกัน

Next, we have the "Orders" table:

O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15

Note that the "O_Id" column is the primary key in the "Orders" table and that the "P_Id" column refers to the persons in the "Persons" table without using their names.
Notice that the relationship between the two tables above is the "P_Id" column.
คอลัมน์ "O_Id" ก็เป็น primary key ของตาราง "Orders" เช่นกันและคอลัมน์ "P_Id" นี้ก็ได้อ้างถึงบุคคลในตาราง "Persons" โดยไม่ได้ใช้ชื่อจริงๆ (แต่ใช้รหัสแทน)
จะสังเกตเห็นว่า ทั้ง 2 ตารางข้างบนนี้จะมีความสัมพันธ์กันผ่านคอลัมน์ "P_Id"


...พักก่อน เด๋วมาทำต่อนะคับพี่น้อง อดใจรอนิสนึง...










credit : http://www.w3schools.com/Sql/sql_join.asp


วันจันทร์ที่ 26 มกราคม พ.ศ. 2552

Getting Only the Date Part of a Date/Time Stamp in SQL Server

-----------------------------------------------------------------------------------------------
เป็นการแปลงวันที่และเวลา ตัวอย่างนี้จะเป็นการเปรียบเทียบให้เห็นสองแบบ
วิธีที่ 1 ใช้่การตัด วัน/เืดือน/ปี จาก GetDate() แล้วนำมาต่อเป็น ปี/เดือน/วัน แล้วเปลี่ยนกลับมาเป็นรูปแบบ Datetime เหมือนเดิม ซึ่งจะมีฟังค์ชันที่เกี่ยวข้องอยู่ 7 ตัว
วิธีที่ 2 ดูเรียบง่ายกว่าเพราะใช้เพียง 3 เมธอดและไม่มีการตัดข้อความแต่จะนำมาต่อให้อัตโนมัติ
ประสิทธิภาพเมื่อทดสอบกับข้อมูล 3,000 เรคอร์ด
วิธีที่ 1 : 115 ms
วิธีที่ 2: 16ms (มีประสิทธิภาพมากกว่าเยอะเลยคับพี่น้อง)
-----------------------------------------------------------------------------------------------
SELECT
-- Get the full date/time stamp as a base.
(
GETDATE()
) AS date_time_part,

-- Trying casting to a string then back to a date.
(
CAST(
(
STR( YEAR( GETDATE() ) ) + '/' +
STR( MONTH( GETDATE() ) ) + '/' +
STR( DAY( GETDATE() ) )
)
AS DATETIME
)
) AS date_only_part,

-- Try casting to float, rounding, and back to date.
(
CAST(
FLOOR( CAST( GETDATE() AS FLOAT ) )
AS DATETIME
)
) AS date_only_part2,

-- Try casting just to float to see what it looks like.
(
CAST( GETDATE() AS FLOAT )
) AS float_value,

-- Try flooring to see the intermediary step.
(
FLOOR( CAST( GETDATE() AS FLOAT ) )
) AS int_value

-----------------------------------------------------------------------------------------------
เครดิต :
http://www.bennadel.com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm


-----------------------------------------------------------------------------------------------